Ein Ansatz besteht darin, die Assembly-Liste des Programms zu betrachten.
Suchen Sie nach dem Kompilieren des Programms (über die Schaltfläche Überprüfen oder Herunterladen) das Verzeichnis, in dem die Dateien .cpp, .hex und .elf für das Programm gespeichert wurden. (Wenn Sie Probleme haben, sie zu finden, aktivieren Sie kurz die ausführlichen Kompilierungsoptionen in der Arduino-IDE und sehen Sie sich die Verzeichnisnamen in der Ausgabe an.)
Führen avr-objdump -S
Sie > listing.txt
in diesem Verzeichnis fn.cpp.elf aus, wobei fn.cpp.elf der Name Ihrer Skizze ist, die am Ende .ino
entfernt und .cpp.elf
hinzugefügt wurde. Zum Beispiel mit Skizze serialecho.ino
:
avr-objdump -S serialecho.cpp.elf> Listing.txt
Zeigen Sie die listing.txt
Datei an und subtrahieren Sie die Startadresse jeder Funktion von ihrer Endadresse mithilfe von Hex-Arithmetik. Zum Beispiel mit setup
Code
void setup () {Serial.begin (9600); }}
In der Liste werden wir sehen
00000144 <setup>:
...(6 lines snipped)...
144: 26 e0 ldi r18, 0x06 ; 6
146: 40 e8 ldi r20, 0x80 ; 128
148: 55 e2 ldi r21, 0x25 ; 37
14a: 60 e0 ldi r22, 0x00 ; 0
14c: 70 e0 ldi r23, 0x00 ; 0
14e: 80 e1 ldi r24, 0x10 ; 16
150: 92 e0 ldi r25, 0x02 ; 2
152: db c1 rjmp .+950 ; 0x50a <_ZN14HardwareSerial5beginEmh>
00000154 <loop>:
Die Berechnung 0x154–0x144 = 0x10 zeigt, dass dieser Teil setup
16 Byte lang ist.
Diese Beispiele wurden auf einem Linux-System generiert. Ich denke, der Ansatz ist auf einem MSWindows-System der gleiche, außer dass Sie möglicherweise avr-objdump.exe
anstelle von sagen avr-objdump
müssen und möglicherweise seinen Pfad angeben müssen. Siehe z. B. die Assemler-Ergebnisse, wo? Thread bei forum.arduino.cc.
James Waldby - jwpat7
quelle