Bir yaklaşım, programın derleme listesine bakmaktır.
Programı derledikten sonra (Doğrula veya İndir düğmesiyle) programın .cpp, .hex ve .elf dosyalarının saklandığı dizini bulun. (Bunları bulmakta sorun yaşıyorsanız, arduino IDE'deki ayrıntılı derleme seçeneklerini kısaca açın ve çıktıdaki dizin adlarına bakın.)
Bu dizinde, avr-objdump -S
fn.cpp.elf komutunu çalıştırın ;> listing.txt
burada fn.cpp.elf , çiziminizin sonuna .ino
alınan ve .cpp.elf
sonuna eklenecek olan adıdır . Örneğin, çizim ile serialecho.ino
:
avr-objdump -S serialecho.cpp.elf> liste.txt
listing.txt
Dosyayı görüntüleyin ve onaltılık aritmetik kullanarak her işlevin başlangıç adresini bitiş adresinden çıkarın. Örneğin, setup
kod ile
void setup () {Serial.begin (9600); }
listede göreceğiz
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>:
0x154–0x144 = 0x10 hesaplaması, bu bölümün setup
16 bayt uzunluğunda olduğunu gösterir.
Bu örnekler bir linux sistemi üzerinde üretilmiştir. Bir MSWindows sisteminde yaklaşımın aynı olduğunu düşünüyorum, avr-objdump.exe
bunun yerine söylemeniz avr-objdump
gerekebilir ve yolunu belirtmeniz gerekebilir. Örneğin, Assemler sonuçlarına bakın, nerede? forum.arduino.cc adresindeki iş parçacığı.