Ich habe eine Skizze gemacht, aber dann habe ich sie verloren. Ich habe es jedoch auf das Arduino hochgeladen, bevor ich es verloren habe. Kann ich es auf irgendeine Weise zurückbekommen?
Ich habe eine Skizze gemacht, aber dann habe ich sie verloren. Ich habe es jedoch auf das Arduino hochgeladen, bevor ich es verloren habe. Kann ich es auf irgendeine Weise zurückbekommen?
Antworten:
Dies sollte möglich sein, solange das Sicherheitsbit nicht gesetzt ist. Diese Frage wurde EE vor einiger Zeit gestellt.
Ist es möglich, Code von einem Arduino-Board zu extrahieren?
Sie erhalten jedoch nicht den Arduino-Code, den Sie zurückgeschrieben haben. Der Code wird in Assembler kompiliert, und Sie müssen ihn selbst zurück in C konvertieren.
Diese Antwort beantwortet die Frage nicht direkt, führt jedoch zu demselben Endergebnis.
Die Arduino IDE verwendet temporäre Verzeichnisse zum Speichern von Build-Dateien, einschließlich der ursprünglichen Skizze sowie der HEX- und Zwischendateien.
Auf einem Mac befinden sich diese standardmäßig in / var / und auf einem Windows-Computer in… \ Local Settings \ Temp \ (je nach Windows-Version an mehreren Stellen).
Ich habe festgestellt, dass diese Build-Dateien vor allem in Windows nicht gelöscht werden, wenn Sie die Skizze oder die IDE schließen, sodass sie möglicherweise viel länger auf Ihrem Computer vorhanden sind, als Sie denken.
Standardmäßig sichern Crashplan, Backblaze und Time Machine diese Speicherorte. Selbst wenn sie gelöscht wurden, befinden sie sich möglicherweise noch in einer Sicherung.
Der Vorteil hierbei ist, dass Sie C-Code und nicht ASM wiederherstellen.
/tmp/
Verzeichnissen unter Linux (und sogar unter Mac). cf arduino.cc/en/Hacking/BuildProcess
Sie können den Hex-Dump der Datei herunterladen, aber es gibt keine einfache Möglichkeit, den gesamten C ++ - Code und die Kommentare abzurufen. Wenn Sie Assembler verstehen, können Sie das Programm neu erstellen, aber das würde eine Weile dauern. Es gibt Dissembler für einige Geräte, ich weiß nicht über Arduino.
atmega disassembler
).
Ich denke, es gibt einen anderen Weg, dies zu tun, ohne den Code aus dem Arduino-Board zu extrahieren. Merken Sie sich das Datum, an dem Sie die Skizze erstellt haben, und suchen Sie danach in C: \ Users \ User \ AppData \ Local \ Temp \ (Beispiel: C: \ Users \ User \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a). Sie könnten Ihren ungespeicherten Code finden, es sei denn, er wurde von einem "Freispeicherprogramm" gelöscht. Viel Glück!
Wenn Sie nicht einfach den identischen Code auf ein anderes Gerät kopieren möchten, lautet die einfache Antwort: Nein
Wie bereits in anderen Antworten erwähnt, können Sie den Hex-Code auf dem Gerät wieder in Assembler-Code umwandeln.
Zum Beispiel (nachdem Sie den Code vom Gerät zurück auf Ihre Festplatte kopiert haben):
avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex
Führen Sie eine der Bootloader-Dateien aus. Ich erhalte die folgenden Ergebnisse (teilweise):
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
Wie Sie sehen, nicht besonders hilfreich für die Reproduktion Ihrer Skizze. Es gibt wahrscheinlich eines von zwei Szenarien:
Im Fall einer "kurzen Skizze" ist es besser, wenn Sie nur von Grund auf neu schreiben. Das wäre mit ziemlicher Sicherheit schneller. Im Fall der "langen Skizze" ist es das einfach nicht wert. Keiner der Variablennamen bleibt erhalten, und die Art und Weise, wie der Compiler den Code optimiert, ist schwer zu bestimmen, auch die Struktur des Codes.