Existe alguma maneira de baixar um esboço de um Arduino?

44

Fiz um esboço, mas depois o perdi. No entanto, enviei-o para o Arduino antes de perdê-lo. Existe alguma maneira de recuperá-lo?

O cara com o chapéu
fonte
5
electronics.stackexchange.com/questions/28211/… mas, como outros dizem, isso apenas gera arquivos .hex, não a fonte C de origem.
jippie
Dupe entre
asheeshr

Respostas:

20

Essa resposta não responde diretamente à pergunta, mas ainda resultará no mesmo resultado final.

O IDE do Arduino usa diretórios temporários para armazenar arquivos de construção, incluindo o esboço original, além dos arquivos HEX e intermediário.

Em um Mac, elas estão em / var / folders por padrão e em uma máquina Windows em… \ Local Settings \ Temp \ (que, dependendo da versão do Windows, pode estar em vários lugares).

Descobri que, especialmente no Windows, esses arquivos de compilação não são excluídos quando você fecha o esboço ou o IDE; portanto, eles podem existir na sua máquina por muito mais tempo do que você imagina.

Além disso, por padrão, Crashplan, Backblaze e Time Machine fazem backup desses locais, portanto, mesmo que tenham sido excluídos, eles ainda podem estar em um backup.

A vantagem aqui é que você recuperará o código C em vez do ASM.

Cybergibbons
fonte
3
Esta é a melhor solução IMHO. Muito criativo também ...
dda
1
Você pode encontrar isso em /tmp/diretórios no Linux (e até Mac). cf arduino.cc/en/Hacking/BuildProcess
pd12 10/10/16
Eco do comentário da resposta aceita: Lendo o hexadecimal bruto: forum.arduino.cc/index.php?topic=6150.0 e Desmontagem automática: forum.arduino.cc/index.php/topic,46843.0.html
SDsolar
5

Você pode baixar o dump hexadecimal do arquivo, mas não há uma maneira fácil de obter todo o código C ++ e comentários. Se você consegue entender a montagem, pode recriar o programa, mas isso levaria um tempo. Existem desmontadores disponíveis para alguns dispositivos, não sei sobre o arduino.

O médico
fonte
3
Não há desmontadores para o arduino, porque não é do tipo MCU. Não são múltiplas ATMEGA disassemblers (Google atmega disassembler).
Connor Wolf
Se você possui o ambiente do arduino, já possui o avr-objdump como ele vem com o avr-gcc.
Chris Stratton
Leitura de volta o hex cru: forum.arduino.cc/index.php?topic=6150.0 e Desmontagem automática: forum.arduino.cc/index.php/topic,46843.0.html
SDsolar
5

Eu acho que existe outra maneira de fazer isso, sem extrair o código da placa do Arduino. Relembre a data em que você criou o esboço e procure-o em C: \ Usuários \ Usuário \ AppData \ Local \ Temp \ (Por exemplo: C: \ Usuários \ Usuário \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a). Você pode encontrar seu código não salvo, a menos que tenha sido excluído por algum "programa de espaço livre". Boa sorte!

Zathura
fonte
4

A menos que seu objetivo seja simplesmente copiar o código idêntico para outro dispositivo, a resposta simples é: não

Como foi indicado em outras respostas, você pode transformar o código hexadecimal no dispositivo novamente em código assembler.

Por exemplo (depois de copiar o código do dispositivo para o disco):

avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex

Execute em um dos arquivos do carregador de inicialização e obtenho estes resultados (em parte):

00007e00 <.sec1>:
    7e00:       11 24           eor     r1, r1
    7e02:       84 b7           in      r24, 0x34       ; 52
    7e04:       14 be           out     0x34, r1        ; 52
    7e06:       81 ff           sbrs    r24, 1
    7e08:       f0 d0           rcall   .+480           ;  0x7fea
    7e0a:       85 e0           ldi     r24, 0x05       ; 5
    7e0c:       80 93 81 00     sts     0x0081, r24
    7e10:       82 e0           ldi     r24, 0x02       ; 2
    7e12:       80 93 c0 00     sts     0x00C0, r24
    7e16:       88 e1           ldi     r24, 0x18       ; 24
    7e18:       80 93 c1 00     sts     0x00C1, r24
    7e1c:       86 e0           ldi     r24, 0x06       ; 6
    7e1e:       80 93 c2 00     sts     0x00C2, r24
    7e22:       80 e1           ldi     r24, 0x10       ; 16
    7e24:       80 93 c4 00     sts     0x00C4, r24
    7e28:       8e e0           ldi     r24, 0x0E       ; 14
    7e2a:       c9 d0           rcall   .+402           ;  0x7fbe
    7e2c:       25 9a           sbi     0x04, 5 ; 4

Como você pode ver, não é particularmente útil para reproduzir o que o seu esboço fez. É provável que haja um de dois cenários:

  • Seu esboço foi curto; nesse caso, após semanas de trabalho, você pode transformar o código do assembler novamente em C
  • Seu esboço era longo; nesse caso, seria praticamente impossível transformá-lo novamente em C

No caso do "esboço curto", é melhor reescrever do zero. Isso seria mais rápido, quase certamente. No caso do "esboço longo" - simplesmente não vale a pena. Nenhum dos nomes de variáveis ​​é preservado, e da maneira como o compilador otimiza o código, mesmo a estrutura do código seria difícil de determinar.

Nick Gammon
fonte