Come posso ottenere un elenco linguaggio assembly del mio Arduino schizzi su Windows?
Domanda
Mi piacerebbe essere in grado di vedere un elenco linguaggio assembly dei miei schizzi Arduino. Come posso raggiungere questo obiettivo?
Aggiornamento:. Sono in esecuzione il software di Arduino su una macchina Windows
Soluzione
Un modo per farlo è quello di utilizzare avr-objdump
sul file .elf
creato dalla compilazione. Ad esempio, su OS X posso fare questo:
$ cd ~/arduino-0015/examples/Digital/Blink/applet $ avr-objdump -d Blink.elf
(Il tuo percorso su Windows potrebbe essere diverso, ovviamente.) Questo produce un disassemblaggio del codice, di cui una parte sarà simile a questa:
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>
Altri suggerimenti
Se si sta usando Linux, è possibile seguire questo tutorial su come compilare per Arduino senza l'IDE .
Una volta fatto questo, è possibile ottenere un elenco di montaggio eseguendo gcc con l'opzione -s.
I seguenti (hacky) passi forniranno annunci linguaggio assembly di schizzi Arduino e le librerie associate su Windows:
- Download (e rinominare) i href="http://www.arduino.cc/playground/Code/WindowsCommandLine" file batch Arduino nella directory contenente lo schizzo (il file
.pde
) - Impostare le variabili di ambiente richieste, come specificato nella pagina di cui sopra collegato
- Aggiungi
-S
alla variabileabuild_gcc_opts
inabuild.bat
(linea 158) - Esegui
abuild -r -c <pde_filename>
-
Si aspettano di ottenere i seguenti avvisi e gli errori, che si può ignorare:
... 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
Gli annunci linguaggio assembly possono essere trovati nei file .o
nella directory obj
creato. Ad esempio l'elenco relativo al sé schizzo è in obj\<pde_filename>.cpp.o
I -S (non s) bandiera mostrano il codice c come well.Also sapere come 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>
...