In setup
oder loop
, wenn ich einen exit(0)
Anruf hinzufügen würde, an wen würde die Steuerung übergeben werden? Was wäre der nächste Zustand des Mikrocontrollers? Würde es die Ausführung und Abschaltung stoppen?
Ich benutze eine Revision 2 Arduino Uno.
programming
arduino-uno
Ascheshr
quelle
quelle
NOP
Assembly-Anweisungen gefüllt sein , die nur für ein paar Taktzyklen pausierenAntworten:
Meine anfängliche Vermutung ist falsch. Ich hätte gedacht, es würde einfach von Schleife zurückkehren und die Kernbibliothek würde einfach wieder loop () aufrufen. Ich sehe jedoch, dass der folgende Code erstellt wurde. Beachten Sie, dass __stop_program eine harte Schleife ist ...
Ein Auszug aus der Auflistung von Blink.ino mit dem Zusatz exit (0):
Die Demontage der oben genannten:
Beachten Sie, dass Interrupts in der Lage wären, Dinge zu tun, wenn _exit nicht cli aufgerufen hätte. Das ist aber nicht der Fall.
quelle
avr-objdump -S {compiled *.elf file}
Erzeugt eine Datei, die den C-Code enthält, der zu jedem Abschnitt des Assembly-Codes führt. Es ist viel einfacher zu folgen.*.elf
daraus und bekam dann die richtigen Debugging-Symbole. Ich denke, der Arduino-Texteditor / Button-Makro (ich lehne es ab, ihn als IDE zu bezeichnen, da dies nicht der Fall ist) entfernt die Debug-Informationen aus irgendeinem bizarren und dummen Grund nur aus der kompilierten Haupt-C ++ - Datei.avr-objdump -S -I/path/to/the/sketch/folder xxx.elf
. Dies ist der Pfad des Skizzenordners, nicht die .ino-Datei. Dann sollten Sie die C-Quelle in den Dump bekommen.Nun, ich habe es gerade mit meinem Arduino Uno getestet und es hat den Code einfach vollständig gestoppt und alle Ausgaben so belassen, wie sie waren, als der Code aufgehört hat zu laufen (also hat es eine LED belassen, die ich an hatte). Es scheint keine E / A-Bereinigung zu geben, wenn Sie exit aufrufen. Dies war, was ich erwartet hatte, da die Arduino-IDE die Setup- und Loop-Funktionen bietet. Wenn Sie den ATMEGA * 28 mit einer anderen AVR-IDE programmieren, starten Sie mit der Hauptfunktion wie bei allen C / C ++ - Programmen. Die Setup- und Loop-Funktionen sind bei AVR-MCUs nicht Standard.
Hinweis: Durch Drücken der Reset-Taste wird der Code neu gestartet, falls Sie sich fragen.
quelle
exit(0)
der zerlegten Anweisungen sind (IIRC)__stop_program
,cli
und eine spinlock. Ich wollte überprüfen, ob dies korrekt ist, und erläutern, wie die Steuerung übergeben wird, z. B. Aufruf des Aufrufstapels ?, ISR-Aufruf?