Как я могу получить список моих эскизов Arduino на языке ассемблера в Windows?
Вопрос
Я хотел бы иметь возможность видеть список моих эскизов Arduino на языке ассемблера.Как я могу этого добиться?
Обновить: Я запускаю программное обеспечение Arduino на компьютере с Windows.
Решение
Один из способов сделать это - использовать 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>
Другие советы
Если вы используете Linux, вы можете следовать это руководство о том, как скомпилировать для Arduino без IDE.
Как только вы сделаете это, вы можете получить список сборок, запустив gcc с флагом -s .
Следующие (hacky) шаги предоставят списки эскизов Arduino на языке ассемблера и связанных библиотек в Windows:
- Загрузите (и переименуйте) Пакетные файлы командной строки Arduino Windows в каталог, содержащий ваш эскиз (the
.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
Флаг -S (не s) также показывает код c.Также известен как смешанный список:
linux:(.arduino/preferences.txt:delete_target_folder=ложь)
$ cd /tmp/buildxxxx.tmp
$ avr-objdump -dS Blink.cpp.elf
int main(void)
{
init();
2f4: 8a df rcall .-236 ; 0x20a <init>
...