Je viens enfin de comprendre pourquoi mon module timer ne marche pas. J'aimerais avoir votre avis là dessus histoire de savoir si ce comportement est normal ou si c'est un bug que je devrais remonter -- Pascal, si tu es là ;) --
En résumé, j'ai un fichier .c qui ne contient qu'une fonction SIGNAL(truc) qui est appelée lorsque l'interruption truc a lieu. Cette macro SIGNAL() se réduit, après préprocesseur, à qqchose du genre: void __vector_14 (void) __attribute__ ((signal)); void __vector_14 (void) { ... } Jusqu'ici tout va bien. Sauf que mon code crashe. Pourquoi ? Parce qu'en fait lorsque le linker veut générer le binaire final, il voit que la fonction __vector_14 de la bibliothèque timer.a n'est appelée par personne, donc on peut virer tout le .o (qui ne contient que cette fonction). Si j'ajoute une autre fonction à ce .c et que je l'appelle, ça fonctionne. Pour moi, c'est un bug car une fonction de type SIGNAL() n'est jamais appelée par personne et doit donc toujours figurer dans le binaire final. Des avis ? Pour le moment, mon workaround est de mettre tous les SIGNAL() dans le même fichier que l'init (de toute façon ça servait à rien de les séparer). Olivier _______________________________________________ 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