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?
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?
Respostas:
Deve ser possível desde que o bit de segurança não esteja definido. Esta pergunta foi feita no EE há um tempo.
É possível extrair código de uma placa do arduino?
Mas você não receberá o código do Arduino que escreveu de volta. O código é compilado em assembly e você terá que convertê-lo novamente em C.
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.
/tmp/
diretórios no Linux (e até Mac). cf arduino.cc/en/Hacking/BuildProcess
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.
atmega disassembler
).
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!
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:
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.