Olivier MATZ a écrit : > Hello, > > Voici quelques pistes (je n'ai pas de quoi faire l'essai avant qqs jours). > > > - Dans scheduler_config.h, les deux valeurs suivantes doivent être > cohérentes, par exemple : TIMER0_PRESCALER_DIV_32 et > SCHEDULER_CLOCK_PRESCALER 32. > > Là il y a : > #define SCHEDULER_CK TIMER0_PRESCALER_DIV_8 > #define SCHEDULER_CLOCK_PRESCALER 32 /* must coherent with value above */ > ok j'avais pas pas compris ça, mais si je met TIMER0_PRESCALER_DIV_32 il me met une erreur :
/aversive/modules/base/scheduler/scheduler.c:49: error: 'TIMER0_PRESCALER_DIV_32' undeclared (first use in this function) > Je vais ajouter un exemple en commentaire pour être bien sûr que c'est > clair. > > > - Probablement rien à voir avec ton pb, mais tu ne dois pas avoir une > version récente de avr-gcc, car le prototype de fdevopen() est passé de : > fdevopen((int(*)(char))uart0_send, (int(*)(void))uart0_recv, 0); > > à : > fdevopen(uart0_dev_send, uart0_dev_recv); > En fait c'est du recopiage d'eirbot, mais ton truc n'a pas l'air de marcher. J'ai la version 4.1.0 de avr-gcc > > - Le prototype de time_init() est (vous noterez la faute de frappe à > given) : > /** init time module : schedule the event with the givent priority */ > void time_init(uint8_t priority); > > Le fait de mettre un priorité de 0 à cet évenement et 128 à l'évenement > transmettre() (c'est la priorité par défaut) fait que l'évenement sera > delayé tant que le plus prioritaire n'est pas terminé. Du coup ton > horloge dérive très légèrement. Je verrais plus un time_init(200); > Ok c'est fait. > Je dirais que d'une manière générale, les printf doivent aller dans les > fonctions main() ou évenements à faible priorité. A noter que > d'augmenter significativement la taille de la fifo d'émission dans > l'uart devrait aussi permettre de résoudre le pb en rendant le printf > bcp plus court. > En fait c'était pour faire des tests rapides et vu que je l'appelle toutes les dix secondes et que mon anémomètre ne risque pas d'aller à plus de 50Hz (sinon on en entendrait parler au info ;) je me suis dit que ce n'était pas très important. > > - Encore 2 choses qui n'ont probablement rien à voir : > void transmettre(void) doit avoir comme prototype > void transmettre(void * dummy), même si dummy n'est pas utilisé. > Ok fait. > Et time_get_s() retourne des 'seconds', qui est un uint32_t, donc le > cast en (unsigned int) le transforme en 16 bits sur AVR, tu ne > dépasseras donc pas 65536 secondes dans le printf()... attention par > contre à la chaine de format "%ld" dans le cas d'un 32 bits. > Oups je corrige ça. > > Vala, tiens moi au courant si ça marche (ou pas). > bin ... au fait c'est quoi la commande cvs pour prendre le code à jour ? merci > FabM > _______________________________________________ Avr-list mailing list Avr-list@droids-corp.org CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive WIKI : http://wiki.droids-corp.org/index.php/Aversive DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/ BUGZILLA : http://bugzilla.droids-corp.org COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog