Ho fatto uno schizzo, ma poi l'ho perso. Tuttavia, l'ho caricato su Arduino prima di perderlo. C'è un modo per riaverlo?
Ho fatto uno schizzo, ma poi l'ho perso. Tuttavia, l'ho caricato su Arduino prima di perderlo. C'è un modo per riaverlo?
Risposte:
Dovrebbe essere possibile finché il bit di sicurezza non è impostato. Questa domanda è stata posta su EE qualche tempo fa.
È possibile estrarre il codice da una scheda arduino?
Ma non otterrai il codice Arduino che hai riscritto. Il codice viene compilato in assembly e dovrai riconvertirlo da solo in C.
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.
/tmp/
directory su Linux (e persino su Mac). cf arduino.cc/en/Hacking/BuildProcess
È 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.
atmega disassembler
).
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!
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:
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.