Como posso obter uma linguagem de montagem lista do meu Arduino Sketches no Windows?
Pergunta
Eu gostaria de ser capaz de ver uma linguagem assembly listando de meus esboços Arduino. Como posso conseguir isso?
Update:. Estou executando o Software Arduino em uma máquina Windows
Solução
Uma maneira de fazer isso é usar avr-objdump
no arquivo .elf
criada pela construção. Por exemplo, no OS X eu posso fazer isso:
$ cd ~/arduino-0015/examples/Digital/Blink/applet $ avr-objdump -d Blink.elf
(. Seu caminho no Windows podem ser diferentes, obviamente) Isso produz uma desmontagem do código, parte do qual será algo parecido com isto:
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>
Outras dicas
Se você estiver usando Linux, você pode seguir este tutorial sobre como compilar para o Arduino sem a IDE .
Depois de fazer isso, você pode obter uma lista de montagem, executando gcc com a flag-s.
As seguintes (hacky) passos irá fornecer listagens de montagem linguagem de esboços Arduino e bibliotecas associadas no Windows:
- Baixar (e renomeação) os Arduino do Windows para o diretório contendo o seu esboço (o arquivo
.pde
) - Definir as variáveis ??de ambiente necessárias, conforme especificado no anterior página vinculada
- Adicione
-S
à variávelabuild_gcc_opts
emabuild.bat
(linha 158) - Executar
abuild -r -c <pde_filename>
-
Espera obter os seguintes avisos e erros, que você pode ignorar:
... 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
As listagens linguagem assembly pode ser encontrada nos arquivos .o
no diretório obj
criado. Por exemplo, o listando para o desenho em si é em obj\<pde_filename>.cpp.o
Os -S (não s) flag mostrar o código c como well.Also saber como a lista mista:
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>
...