Dans l'un setup
ou l'autre loop
, si je devais ajouter un exit(0)
appel, où le contrôle serait-il passé? Quel serait le prochain état du microcontrôleur? Cela arrêterait-il l'exécution et mettrait-il hors tension?
J'utilise un Arduino Uno de révision 2.
programming
arduino-uno
asheeshr
la source
la source
NOP
instructions d'assemblage, qui s'arrêtent juste pendant quelques cycles d'horlogeRéponses:
Ma première supposition est fausse. J'aurais pensé qu'il reviendrait simplement de la boucle et que la bibliothèque principale appellerait simplement loop () à nouveau. Cependant, je vois que le code suivant a été créé. Remarquant que __stop_program est une boucle difficile ...
Un extrait de la liste de Blink.ino, avec la sortie (0) ajoutée:
Le démontage de ce qui précède:
Notez que si _exit n'avait pas appelé cli, les interruptions pourraient faire des choses. Mais ce n'est pas le cas.
la source
avr-objdump -S {compiled *.elf file}
produit un fichier qui inclut le code C qui mène à chaque section du code assembleur. C'est beaucoup plus facile à suivre.*.elf
partir de cela, puis j'obtiens les symboles de débogage appropriés. Je pense que le Arduino éditeur de texte / bouton macro (je refuse de l' appeler un IDE car ce n'est pas) chose dépouillant les informations de débogage à partir de tout le fichier principal de C ++ compilé, pour une raison bizarre et stupide.avr-objdump -S -I/path/to/the/sketch/folder xxx.elf
. Il s'agit du chemin du dossier d' esquisse , pas du fichier .ino lui-même. Ensuite, vous devriez obtenir la source C dans le vidage.Eh bien, je viens de le tester avec mon Arduino Uno et il a complètement arrêté le code et laissé toutes les sorties telles qu'elles étaient lorsque le code a cessé de fonctionner (il a donc laissé une LED que j'avais allumée). Il ne semble pas y avoir de nettoyage d'E / S lorsque vous appelez exit. C'est ce que j'attendais car l'IDE Arduino fournit les fonctions de configuration et de boucle, si vous programmez l'ATMEGA * 28 avec n'importe quel autre IDE AVR, vous commencez avec la fonction principale comme tous les programmes C / C ++. Les fonctions de configuration et de boucle ne sont pas standard sur les AVR MCU.
Remarque: La pression du bouton de réinitialisation redémarre le code, si vous vous posiez la question.
la source
exit(0)
les instructions démontées sont (IIRC)__stop_program
,cli
et un verrou tournant. Je voulais vérifier si cela est correct avec une explication de la façon dont le contrôle est passé, c.-à-d. Appel pile pop?, Appel ISR?