Wenn ich es richtig verstanden habe, ist die Arduino Software eine C-Biliothek, die dann in Maschinensprache kompiliert wird. Ich habe ein Programm für den Arduino geschrieben. Besteht zu Lernzwecken die Möglichkeit, das auf die Basisbefehle von C übersetzte und das daraus erzeugte Assembler Programm zu sehen? Ich habe Microcontroller auf der MPLAB Entwicklungsumgebung von Microchip kennen gelernt. Dort ist zumindest bei Abschalten der Compiler-Optimierung hinter jedem einzelnen C-Befehl aufgeführt, wie er in Assembler übersetzt wurde. Mit AVR C und Assembler habe ich noch keine Erfahrung.
Christine schrieb: > Wenn ich es richtig verstanden habe, ist die Arduino Software eine > C-Biliothek Arduino ist C++, und es ist mehr als nur eine Bibliothek; der Code wird auch noch etwas umgebaut (leider). Christine schrieb: > das auf die Basisbefehle von C übersetzte Bibliotheken werden nie auf "Basisbefehle" umgesetzt. Da wird direkt Maschinencode draus. Arduino speichert beim Kompilieren unter "/tmp/arduino_build_xxx/" temporäre Dateien. Unter sketch/sketchname.ino.cpp findet sich vermutlich das, was der Compiler sieht. Unter sketchname.ino.elf findet sich das Kompilat. Das kann man mit
1 | /pfad/zur/Arduino/IDE/hardware/tools/avr/bin/avr-objdump -d -S -C sketchname.ino.elf |
disassemblieren, um den erzeugten Code zu sehen. Das "-S" bewirkt die Anzeige der C++-Zeilen. Da Arduino aber immer mit Optimierungen kompiliert, ist das ziemlich durcheinander und m.E. mehr verwirrend als hilfreich, weshalb ich das nie nutze. Das "-C" bewirkt die lesbare Anzeige der C++-Symbole (demangling).
Man könnte eventuell auch in der "platform.txt" /pfad/zur/Arduino/IDE/hardware/platform.txt die GCC-Optionen für die Erzeugung der Assembler-List-Files anhängen: https://www.systutorials.com/240/generate-a-mixed-source-and-assembly-listing-using-gcc/
Hier habe ich das mal beschrieben, wie man das automatisieren kann, ohne die originale platform.txt ändern zu müssen. Beitrag "Re: Welche Ressourcen nutzt die Arduino Software?" So wird dann in dem Build Verzeichnis, bei jeder Kompilation, eine *.asm und eine *.map Datei erzeugt.
Adam P. schrieb: > Such mal nach: "avr disassembler" Gefunden: Niklas G. schrieb: > Das kann man mit [...] avr-objdump -d -S -C sketchname.ino.elf disassemblieren
Niklas G. schrieb: > Niklas G. schrieb: >> Das kann man mit [...] avr-objdump -d -S -C sketchname.ino.elf disassemblieren Aber nur wenn er eine *.elf Datei hat. Ich habe Ihm den Weg vorgeschlagen: HEX -> ASM.
Adam P. schrieb: > Aber nur wenn er eine *.elf Datei hat. Die gibt Arduino raus. Adam P. schrieb: > Ich habe Ihm den Weg vorgeschlagen: HEX -> ASM. Ich hab nix von HEX gelesen... Ohne Funktionsnamen wird das ganze noch lästiger.
Niklas G. schrieb: > Die gibt Arduino raus. Also ich habe hier ein Arduino-Projekt und da finde ich keine *.elf
Adam P. schrieb: > Also ich habe hier ein Arduino-Projekt und da finde ich keine *.elf Niklas G. schrieb: > Arduino speichert beim Kompilieren unter "/tmp/arduino_build_xxx/" > temporäre Dateien. [...] Unter sketchname.ino.elf findet > sich das Kompilat.
Adam P. schrieb: > Niklas G. schrieb: >> Die gibt Arduino raus. > > Also ich habe hier ein Arduino-Projekt und da finde ich keine *.elf Dann schaust du nicht in die richtige Ecke! Ausführliche Meldungen aktivieren. In den Meldungen erscheint das Build Verzeichnis. Dort, und nur dort.
OK, wieder was dazu gelernt. Ich programmier eigentlich kein Arduino, deshalb wusste ich es nicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.