¿Hay alguna forma de descargar un boceto de un Arduino?

Respuestas:

20

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.

Cybergibbons
fuente
3
Esta es la mejor solución en mi humilde opinión. Muy creativo, también ...
dda
1
Puede encontrar esto en /tmp/directorios en Linux (e incluso Mac). cf arduino.cc/en/Hacking/BuildProcess
pd12
Comentario del eco de la respuesta aceptada: Lectura del hexadecimal sin formato : forum.arduino.cc/index.php?topic=6150.0 y Desmontaje automático: forum.arduino.cc/index.php/topic,46843.0.html
SDsolar
5

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.

TheDoctor
fuente
3
No hay desensambladores para arduino, porque no es un tipo MCU. No son múltiples ATmega desensambladores (Google atmega disassembler).
Connor Wolf
Si tiene el entorno arduino, ya tiene avr-objdump como viene con avr-gcc.
Chris Stratton
Lectura del hex en bruto: forum.arduino.cc/index.php?topic=6150.0 y Desmontaje automático: forum.arduino.cc/index.php/topic,46843.0.html
SDsolar
5

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!

Zathura
fuente
4

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:

  • Su boceto fue corto, en cuyo caso, después de semanas de trabajo, podría volver a convertir el código del ensamblador en C
  • Su boceto fue largo, en cuyo caso sería prácticamente imposible volver a convertirlo en C

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.

Nick Gammon
fuente