Salah satu pendekatan adalah melihat daftar perakitan program.
Setelah mengkompilasi program (melalui tombol Verifikasi atau Unduh) temukan direktori tempat file .cpp, .hex, dan .elf untuk program disimpan. (Jika Anda kesulitan menemukannya, aktifkan opsi kompilasi verbose secara singkat di arduino IDE dan lihat nama direktori di output.)
Dalam direktori itu, jalankan avr-objdump -S
fn.cpp.elf di > listing.txt
mana fn.cpp.elf adalah nama sketsa Anda dengan .ino
dilepas dan .cpp.elf
ditambahkan di akhir. Misalnya, dengan sketsa serialecho.ino
:
avr-objdump -S serialecho.cpp.elf> listing.txt
Lihat listing.txt
file, dan kurangi alamat awal setiap fungsi dari alamat akhir, menggunakan hitung aritmatika. Misalnya dengan setup
kode
void setup () {Serial.begin (9600); }
dalam daftar kita akan lihat
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>:
Perhitungan 0x154–0x144 = 0x10 menunjukkan bagian setup
ini panjangnya 16 byte.
Contoh-contoh ini dihasilkan pada sistem linux. Saya pikir pendekatannya sama pada sistem MSWindows kecuali Anda mungkin perlu mengatakan avr-objdump.exe
alih-alih avr-objdump
, dan mungkin perlu menentukan jalurnya. Lihat, misalnya, hasil Assemler, di mana? utas di forum.arduino.cc.
James Waldby - jwpat7
sumber