Как я могу получить список ассемблеров моих эскизов Arduino в Windows?
Я хотел бы видеть список ассемблера моих эскизов Arduino. Как я могу достичь этого?
Обновление: Я запускаю программное обеспечение Arduino на компьютере под управлением Windows.
Ответы
Ответ 1
Один из способов сделать это - использовать avr-objdump
в файле .elf
, созданном сборкой. Например, в OS X я могу сделать это:
$ cd ~/arduino-0015/examples/Digital/Blink/applet
$ avr-objdump -d Blink.elf
(Очевидно, что ваш путь в Windows может быть другим.) Это создает разборку кода, часть которого будет выглядеть примерно так:
0000013a <main>:
13a: 0e 94 3e 01 call 0x27c <init>
13e: 0e 94 97 00 call 0x12e <setup>
142: 0e 94 80 00 call 0x100 <loop>
146: fd cf rjmp .-6 ; 0x142 <main+0x8>
Ответ 2
Если вы используете Linux, вы можете следовать этому руководству по компиляции для Arduino без IDE.
Как только вы это сделаете, вы можете получить листинг сборки, выполнив gcc с флагом -s.
Ответ 3
Следующие (хакерские) шаги предоставят ассемблерные списки эскизов Arduino и связанных с ними библиотек в Windows:
- Загрузите (и переименуйте) командные файлы командной строки Arduino Windows в каталог, содержащий ваш эскиз (файл
.pde
)
- Настройте необходимые переменные среды, указанные на приведенной выше ссылке.
- Добавить
-S
в переменную abuild_gcc_opts
в abuild.bat
(строка 158)
- Запустить
abuild -r -c <pde_filename>
-
Ожидайте получения следующих предупреждений и ошибок, которые вы можете игнорировать:
... warning: #warning "This file has been moved to <util/delay.h>."
.\obj\<pde_filename>.cpp.o: file format not recognized: treating as linker script
.\obj\<pde_filename>.cpp.o:1: syntax error
Списки языков ассемблера можно найти в файлах .o
в созданном каталоге obj
. Например, список самого эскиза находится в obj\<pde_filename>.cpp.o
Ответ 4
Флаг -S (не s) также показывает код c. Также известен как смешанный список:
linux: (.arduino/preferences.txt: delete_target_folder = false)
$ cd /tmp/buildxxxx.tmp
$ avr-objdump -dS Blink.cpp.elf
int main(void)
{
init();
2f4: 8a df rcall .-236 ; 0x20a <init>
...