Go Down

Topic: Compilar e ver o codigo gerado em assembly (Read 4647 times) previous topic - next topic

pledoux

É possível fazer isso com a IDE do Arduino?
Alguém tem idéia de como se faz isso?

Com o avr-gcc usando o comando -S chamando o compilador
por comandos de prompt  no linux mostra o codigo traduzido
pro assembly. A IDE do arduino usa o avr-gcc mas não sei como
e se é possível ligar essa opção.

bubulindo

Acho que tens de encontrar a MakeFile para veres qual é o output do GCC. Assim de repente não faço ideia para onde vão esses ficheiros.
This... is a hobby.

neuron_upheaval

Será que não tem como descompilar o arquivo HEX gerado na hora de fazer upload do sketch para o Arduino? Porque, em algum momento, o avrdude tem que ter o HEX.

Dá uma vasculhada nas pastas onde está o seu sketch pra ver se o HEX não está lá junto também.

bubulindo

Já agora... conheces como "descompilar" de hex para assembly?
This... is a hobby.

mmoscz

Pelo que sei, pelo AVR Studio há uma maneira de abrir o HEX e ver o equivalente em asm
Eu não tenho instalado.
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

fabio_h

#5
Apr 02, 2012, 04:01 pm Last Edit: Apr 02, 2012, 04:05 pm by fabiohbm007 Reason: 1
é possivel fazer e não precisa ter nada instalado...
cada vez que você compila um sketch no arduino, ele cria uma pasta contendo todos os arquivos do sketch/bibliotecas inclusive o .hex (aqui no meu caso o caminho é esse). Esse é um diretório

C:\Documents and Settings\[USUARIO]\Configurações locais\Temp\build8751132421165911833.tmp\ [arquivos]  

para não ter que ficar procurando, pesquise por arquivos *.elf // esse é o arquivo necessário e não o hex.
achado o elf do seu sketch, copie e cole ele dentro >> [pasta do arduino]\hardware\tools\avr\bin

lá dentro haverá um programa chamado avr-objdump.exe
com um terminal dentro desta pasta digite

avr-objdump.exe -S [seu_sketch].cpp.elf > asm.txt
 

e para aproveitar o terminal aberto já digite notepad asm.txt. Pronto!

aqui vai o blink em assembler// eu retirei muita coisa e  só deixei aqui o setup e loop pra ter uma ideia...
Code: [Select]
void loop() {
 digitalWrite(13, HIGH);   // set the LED on
100: 8d e0       ldi r24, 0x0D ; 13
102: 61 e0       ldi r22, 0x01 ; 1
104: 0e 94 9c 01 call 0x338 ; 0x338 <digitalWrite>
 delay(1000);              // wait for a second
108: 68 ee       ldi r22, 0xE8 ; 232
10a: 73 e0       ldi r23, 0x03 ; 3
10c: 80 e0       ldi r24, 0x00 ; 0
10e: 90 e0       ldi r25, 0x00 ; 0
110: 0e 94 e2 00 call 0x1c4 ; 0x1c4 <delay>
 digitalWrite(13, LOW);    // set the LED off
114: 8d e0       ldi r24, 0x0D ; 13
116: 60 e0       ldi r22, 0x00 ; 0
118: 0e 94 9c 01 call 0x338 ; 0x338 <digitalWrite>
 delay(1000);              // wait for a second
11c: 68 ee       ldi r22, 0xE8 ; 232
11e: 73 e0       ldi r23, 0x03 ; 3
120: 80 e0       ldi r24, 0x00 ; 0
122: 90 e0       ldi r25, 0x00 ; 0
124: 0e 94 e2 00 call 0x1c4 ; 0x1c4 <delay>
}
128: 08 95       ret

0000012a <setup>:
void setup();
void loop();
void setup() {                
 // initialize the digital pin as an output.
 // Pin 13 has an LED connected on most Arduino boards:
 pinMode(13, OUTPUT);    
12a: 8d e0       ldi r24, 0x0D ; 13
12c: 61 e0       ldi r22, 0x01 ; 1
12e: 0e 94 76 01 call 0x2ec ; 0x2ec <pinMode>
}
132: 08 95       ret


O bom disso é que ele mostra o comando e o equivalente em asm.
Aqui há algumas referências: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1240652220
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1207951658 

tomasi

Com o  shift apertado, compile o programa. A saida do HEX estara por exemplo, em:

C:\Documents and Settings\NomeDoUsuario\Local Settings\Temp\build2084784412515958663.tmp\Blink_Sample.cpp.hex

BlogEmbarcado


Olá pessoal. ^^

Estou desenvolvendo uma interface visual para o avr-objdump.exe, bastando apenas indicar o tipo de parâmetros que você deseja e onde está o arquivo .elf .

Vejam o projeto: http://blogembarcado.blogspot.com.br/2012/05/disassembler-arduino.html

Espero ter ajudado.

[]'s ^^

mmoscz



Olá pessoal. ^^

Estou desenvolvendo uma interface visual para o avr-objdump.exe, bastando apenas indicar o tipo de parâmetros que você deseja e onde está o arquivo .elf .

Vejam o projeto: http://blogembarcado.blogspot.com.br/2012/05/disassembler-arduino.html

Espero ter ajudado.

[]'s ^^

Acho que você deveria colocar um post novo no forum, é bem interessante isso.
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

Go Up