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

Répondre à