Pages: [1]   Go Down
Author Topic: Compilar e ver o codigo gerado em assembly  (Read 2490 times)
0 Members and 1 Guest are viewing this topic.
Brazil
Offline Offline
Newbie
*
Karma: 0
Posts: 11
Electrical engineering student
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

É 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.
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

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).

central nervous system
Offline Offline
Full Member
***
Karma: 0
Posts: 135
Causing havoc inside your brain since 1980
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Já agora... conheces como "descompilar" de hex para assembly?
Logged

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).

Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 315
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pelo que sei, pelo AVR Studio há uma maneira de abrir o HEX e ver o equivalente em asm
Eu não tenho instalado.
Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


0
Offline Offline
Full Member
***
Karma: 3
Posts: 131
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

é 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:
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 
« Last Edit: April 02, 2012, 09:05:03 am by fabiohbm007 » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
"Simulating Before Mounting"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset


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 ^^
Logged

blogembarcado.blogspot.com

"Simulino - Arduino simulated on Isis Proteus"

Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 315
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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.
Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


Pages: [1]   Go Up
Jump to: