Один из подходов заключается в том, чтобы взглянуть на список сборки программы.
После компиляции программы (с помощью кнопки «Подтвердить» или «Загрузить») найдите каталог, в котором хранятся файлы .cpp, .hex и .elf для программы. (Если у вас возникли проблемы с их поиском, кратко включите подробные параметры компиляции в IDE arduino и посмотрите на имена каталогов в выходных данных.)
В этом каталоге запустите avr-objdump -S
fn.cpp.elf, > listing.txt
где fn.cpp.elf - это имя вашего эскиза со снятым.ino
и .cpp.elf
добавленным в конце. Например, с эскизом serialecho.ino
:
avr-objdump -S serialecho.cpp.elf> перечисление.txt
Просмотрите listing.txt
файл и вычтите начальный адрес каждой функции из ее конечного адреса, используя шестнадцатеричную арифметику. Например, с setup
кодом
void setup () {Serial.begin (9600); }
в листинге мы увидим
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 показывает, что эта часть setup
имеет длину 16 байтов.
Эти примеры были сгенерированы в системе Linux. Я думаю, что подход такой же в системе MSWindows, за исключением того, что вам, возможно, придется сказать avr-objdump.exe
вместо avr-objdump
, и, возможно, потребуется указать его путь. Смотрите, например, результаты Assemler, где? нить на forum.arduino.cc.
Джеймс Уолдби - jwpat7
источник