Hice un boceto, pero luego lo perdí. Sin embargo, lo cargué en el Arduino antes de perderlo. ¿Hay alguna forma de recuperarlo?
Hice un boceto, pero luego lo perdí. Sin embargo, lo cargué en el Arduino antes de perderlo. ¿Hay alguna forma de recuperarlo?
Respuestas:
Debería ser posible siempre que el bit de seguridad no esté configurado. Esta pregunta se hizo en EE hace un tiempo.
¿Es posible extraer código de una placa arduino?
Pero no obtendrá el código Arduino que escribió de nuevo. El código se compila en ensamblado y tendrá que convertirlo de nuevo a C usted mismo.
Esta respuesta no responde directamente a la pregunta, pero aún dará como resultado el mismo resultado final.
El IDE de Arduino utiliza directorios temporales para almacenar archivos de compilación, incluido el boceto original, así como los archivos HEX e intermedios.
En una Mac, estas están en las carpetas / var / por defecto, y en una máquina con Windows están en ... \ Configuración local \ Temp \ (que dependiendo de la versión de Windows podría estar en varios lugares).
Descubrí que, especialmente en Windows, estos archivos de compilación no se eliminan cuando cierra el boceto o el IDE, por lo que pueden existir en su máquina durante mucho más tiempo de lo que cree.
Además, de manera predeterminada, Crashplan, Backblaze y Time Machine hacen una copia de seguridad de estas ubicaciones, por lo que incluso si se han eliminado, aún pueden estar en una copia de seguridad.
La ventaja aquí es que recuperará el código C en lugar de ASM.
/tmp/
directorios en Linux (e incluso Mac). cf arduino.cc/en/Hacking/BuildProcess
Puede descargar el volcado hexadecimal del archivo, pero no hay una manera fácil de obtener todo el código y los comentarios de C ++. Si puede comprender el ensamblaje, podría volver a crear el programa, pero eso llevaría un tiempo. Hay desensambladores disponibles para algunos dispositivos, no sé sobre arduino.
atmega disassembler
).
Creo que hay otra forma de hacer esto, sin extraer el código de la placa Arduino. Recuerde la fecha en que creó el boceto y búsquelo en C: \ Users \ User \ AppData \ Local \ Temp \ (por ejemplo: C: \ Users \ User \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a). Puede encontrar su código no guardado a menos que lo haya eliminado algún "programa de espacio libre". ¡Buena suerte!
A menos que su objetivo sea simplemente copiar el código idéntico a otro dispositivo, la respuesta simple es: no
Como se ha señalado en otras respuestas, puede volver a convertir el código hexadecimal del dispositivo en código ensamblador.
Por ejemplo (una vez que haya copiado el código del dispositivo nuevamente en su disco):
avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex
Ejecutar en uno de los archivos del gestor de arranque obtengo estos resultados (en 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 puede ver, no es particularmente útil para reproducir lo que hizo su boceto. Es probable que haya uno de dos escenarios:
En el caso del "bosquejo corto", es mejor reescribir desde cero. Eso sería más rápido, casi seguro. En el caso del "bosquejo largo", simplemente no vale la pena. Ninguno de los nombres de las variables se conserva, y la forma en que el compilador optimiza el código, incluso la estructura del código sería difícil de determinar.