Jednym z podejść jest spojrzenie na listę asemblacji programu.
Po skompilowaniu programu (za pomocą przycisku Weryfikuj lub Pobierz) zlokalizuj katalog, w którym przechowywane są pliki .cpp, .hex i .elf dla programu. (Jeśli masz problemy ze znalezieniem ich, na krótko włącz pełne opcje kompilacji w arduino IDE i spójrz na nazwy katalogów na wyjściu.)
W tym katalogu uruchom avr-objdump -S
fn.cpp.elf, > listing.txt
gdzie fn.cpp.elf to nazwa twojego szkicu, który został .ino
zdjęty i .cpp.elf
dodany na końcu. Na przykład ze szkicem serialecho.ino
:
avr-objdump -S serialecho.cpp.elf> listing.txt
Wyświetl listing.txt
plik i odejmij adres początkowy każdej funkcji od adresu końcowego, używając arytmetyki szesnastkowej. Na przykład z setup
kodem
void setup () {Serial.begin (9600); }
w aukcji zobaczymy
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>:
Obliczenia 0x154–0x144 = 0x10 pokazują, że ta część setup
ma długość 16 bajtów.
Te przykłady zostały wygenerowane w systemie Linux. Myślę, że podejście jest takie samo w systemie MSWindows, z tym wyjątkiem, że możesz potrzebować powiedzieć avr-objdump.exe
zamiast avr-objdump
, i może być konieczne określenie jego ścieżki. Zobacz np. Wyniki Asemlera, gdzie? wątek na forum.arduino.cc.
James Waldby - jwpat7
źródło