C'è un modo per scaricare uno schizzo da un Arduino?


Risposte:



20

Questa risposta non risponde direttamente alla domanda, ma comporterà comunque lo stesso risultato finale.

L'IDE Arduino utilizza directory temporanee per archiviare i file di build, incluso lo sketch originale, nonché i file HEX e intermedi.

Su un Mac, questi sono nelle cartelle / var / per impostazione predefinita e su un computer Windows si trovano in ... \ Impostazioni locali \ Temp \ (che a seconda della versione di Windows potrebbe trovarsi in diversi punti).

Ho scoperto che soprattutto in Windows, questi file di build non vengono eliminati quando si chiude lo schizzo o l'IDE, quindi potrebbero esistere sulla macchina per molto più tempo di quanto si pensi.

Inoltre, per impostazione predefinita, Crashplan, Backblaze e Time Machine eseguono il backup di questi percorsi, quindi anche se sono stati eliminati, potrebbero comunque trovarsi in un backup.

Il vantaggio qui è che recupererai il codice C anziché ASM.


3
Questa è la migliore soluzione IMHO. Anche molto creativo ...
dda,

1
Puoi trovarlo nelle /tmp/directory su Linux (e persino su Mac). cf arduino.cc/en/Hacking/BuildProcess
pd12

Commenta l'eco dalla risposta accettata: rileggere l'esagono non elaborato : forum.arduino.cc/index.php?topic=6150.0 e disassemblaggio automatico: forum.arduino.cc/index.php/topic.46843.0.html
SDsolar

5

È possibile scaricare il dump esadecimale del file, ma non esiste un modo semplice per ottenere tutto il codice C ++ e i commenti. Se riesci a capire l'assemblaggio, puoi ricreare il programma, ma ci vorrebbe un po 'di tempo. Ci sono dissasembler disponibili per alcuni dispositivi, non conosco Arduino.


3
Non ci sono disassemblatori per Arduino, perché non è un tipo MCU. Ci sono molteplici ATmega disassemblatori (Google atmega disassembler).
Connor Wolf,

Se hai l'ambientazione arduino, hai già avr-objdump come viene fornito con avr-gcc.
Chris Stratton,


5

Penso che ci sia un altro modo per farlo, senza estrarre il codice dalla scheda Arduino. Ricorda la data in cui crei lo schizzo e cercalo in C: \ Users \ User \ AppData \ Local \ Temp \ (ad esempio: C: \ Users \ User \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a). È possibile trovare il codice non salvato a meno che non sia stato eliminato da un "programma di spazio libero". In bocca al lupo!


4

A meno che il tuo obiettivo non sia semplicemente quello di copiare lo stesso codice su un altro dispositivo, la semplice risposta è: no

Come è stato sottolineato in altre risposte, è possibile ripristinare il codice esadecimale sul dispositivo in codice assembler.

Ad esempio (dopo aver copiato il codice dal dispositivo sul disco):

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

Esegui su uno dei file del bootloader ottengo questi risultati (in 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

Come puoi vedere, non è particolarmente utile per riprodurre ciò che ha fatto il tuo schizzo. È probabile che ci sia uno dei due scenari:

  • Il tuo schizzo era breve, nel qual caso potresti, dopo settimane di lavoro, riportare il codice dell'assemblatore in C
  • Il tuo schizzo era lungo, nel qual caso sarebbe praticamente impossibile riportarlo in C

Nel caso dello "schizzo breve", è meglio riscrivere da zero. Sarebbe più veloce, quasi certamente. Nel caso dello "schizzo lungo" - non ne vale la pena. Nessuno dei nomi delle variabili viene conservato e il modo in cui il compilatore ottimizza il codice, anche la struttura del codice sarebbe difficile da determinare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.