lundi 6 octobre 2014

Cherchez l'erreur

Il était tard et j'avais travaillé toute la journée sur ce projet. Après avoir écris la routine ISR suivante et l'avoir compilée j'ai examiné immédiatement le code assembleur généré pour en estimer le temps d'exécution.

code source
code assembleur généré
Première réaction: C'est court parfait! Non en fait ce n'est pas parfais du tout. Rapidement je constate que le compilateur a laissé tomber une bonne partie du code source! Le code résultant aurais du être ceci:
code assembleur généré, une fois mon erreur corrigée.
Lorsqu'un compilateur laisse tomber du code source c'est pour optimiser. Ici tout le bloc if a été supprimé dans la première version du code. Je regardais mon code source pourtant si simple sans voir mon erreur. Je me suis dis qu'il était tard et que c'était la fatigue qui me rendais aveugle. J'ai donc fermer l'ordinateur en remettant ça au lendemain.

Je m'appraîtais à me mettre au lit lorsque j'ai compris mon erreur. Je vous laisse regarder le code source et trouver par vous même où est l'erreur.

Aucun commentaire:

Enregistrer un commentaire