Go Down

Topic: Compilar e ver o codigo gerado em assembly (Read 2731 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.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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?
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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 ^^
blogembarcado.blogspot.com

"Simulino - Arduino simulated on Isis Proteus"

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