Projekt hex Datei sichern

Hallo, ich habe 2015 ein Sketch auf ein 2560 mit Arduino 1.6.3 geflasht was bis heute seine Dienste verrichtet hat.
Da ich nun eine kleine Änderung am Code vornehmen muss, habe ich mir die aktuelle Arduino Version 1.8.9 installiert und musste leider feststellen das sich die ino Datei nicht mehr fehlerfrei Compilieren ließ.

Die Fehler habe ich nun raus und das Sketch lässt sich nun fehlerfrei compilieren.

Für die Zukunft würde ich aber gern die kompilierte Datei als Sicherung mit aufnehmen.
Es kann ja auch mal sein das mein Mega kaputt geht und ich schnell Ersatz brauche. Dann möchte ich nicht wieder Stunden lang die neue Umgebung zusammen bauen und üben bis alles Fehlerfrei läuft.

In der aktuellen Version gibt es unter Sketch den Punkt Kompilierte Binärdatei exportieren.
Ich erhalte dann 2 Dateien
meinProjekt.ino.mega.hex
meinProjekt.ino.with_bootloader.mega.hex

Leider sehe ich keinen Punkt diese Dateien auf den Mega zu übertragen.

Hi

Das sind HEX-Files, darin enthalten ist das Maschinenprogramm - ein Mal alleine, ein Mal mit Bootloader, daß man den Chip auch danach noch als Arduino (per USB) ansprechen kann.

Diese HEX-Files müssen 'gebrannt' werden.
Das kannst Du z.B. mit einem zweiten Arduino als 'Arduino_as_ISP' machen - dieser Sketch brennt ein HEX-File auf den Ziel-µC.
Neben Arduinos sind so auch ATtiny und ganz anderer Kram möglich.

Darf man fragen, in welcher Richtung Dein Problem lag und wie Du Das lösen konntest?
(wobei Das bei dem Titel Keiner vermuten wird, somit nicht danach suchen und somit Das hier dann auch nicht finden - also eher zweitrangig)

MfG

Svenp:
Leider sehe ich keinen Punkt diese Dateien auf den Mega zu übertragen.

Wo ein Export ist, sollte auch ein Import sein, sehe ich leider auch nicht.

Bis dahin kannst Du die ausführliche Ausgabe beim Kompilieren und Hochladen in der IDE bei Voreinstellungen einschalten. Dann siehst Du eine Zeile wie diese:

C:\Program Files (x86)\arduino-1.8.6\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\arduino-1.8.6\hardware\tools\avr/etc/avrdude.conf -v -patmega2560 -cwiring -PCOM4 -b115200 -D -Uflash:w:C:\Users\User\AppData\Local\Temp\arduino_build_757750/BlinkWithoutDelay.ino.hex:i

Habe ich per Hand noch nicht gemacht, aber wäre einen Versuch wert.

Wenn es funktioniert, kannst Du Dir das als Batch-Datei zusammen mit der hex-Datei sichern.

Hi

Eine HEX importieren wäre herrlich sinnlos - was aus einem Disassembler raus kommt, möchtest Du nicht lesen müssen :wink:
Nicht nur, daß Das dann Assembler wird, jeder Kommentar/sprechende Variablen-Name/Sprungmarke (ja, der Assembler benutzt GOTO ... sogar NUR) ist weg.
Wenn man nicht recht genau weiß, was das Programm macht, wird Das echt zäh.

MfG

@agmue

Vielen Dank für den Hinweis, genau das ist es was ich vermisst habe.
Dann werde ich beim nächsten flashen die Ausgabe einschalten mir mir die Zeilen sichern.

postmaster-ino:
Eine HEX importieren wäre herrlich sinnlos - was aus einem Disassembler raus kommt, möchtest Du nicht lesen müssen :wink:

Das habe ich bei einem Z80 vor vielen Jahren erfolgreich gemacht, aber grundsätzlich stimme ich Dir zu. Mit Importieren meinte ich aber, in den Speicher des µC laden. Wenn ein Mega2560 kaputt geht, will man ja genau das machen, nicht disassemblieren. Das will man ja auch bei vielen µCs, da stört das ständige Kompilieren.

postmaster-ino:
ja, der Assembler benutzt GOTO ... sogar NUR

Man kann wunderbare Programme mit GOTO schreiben, denn FOR/WHILE und dergleichen sind nur Ableitungen davon. Eine gute Programmiersprache unterstützt gute Programmierung, ist aber keine Voraussetzung dafür. Und auch mit einer guten Programmiersprache kann man schlechte Programme schreiben. Für gute Programme ist immer der Programmierer verantwortlich.

Svenp:
Vielen Dank für den Hinweis, genau das ist es was ich vermisst habe.
Dann werde ich beim nächsten flashen die Ausgabe einschalten mir mir die Zeilen sichern.

Bitte probiere es mal aus, nicht daß Du in zehn Jahren auf mich schimpfst :smiley:

PS: Bei einem Großrechner habe ich mal versehendlich Dateien gelöscht. Der Operater hat sich bei mir dafür bedankt, weil sie so herausgefunden hatten, daß ihr Sicherungssystem Murks war. So kann's auch gehen.

Nur zur Motivation:

Die von @agmue gelieferten Informationen sind korrekt und funktionieren - sofern die Porteinstellungen (z.b: PCOM4) und auch die Pfadangaben für den HEX-Source und Avrdude-Verzeichnis passend eingestellt sind.

Ich hatte ähnliche Sorgen und Probleme - und habe mir dazu innerhalb eines andern größeren Programmes eine Routine geschrieben, die genau diese Batch-Routinen zum Upload erzeugt und danach die HEX-Datei (via Avrdude) auf den Chip überträgt. Läuft seit fast 2 Jahren wunderbar und lässt sich für Tinys und Megas entsprechend einstellen. Geschickt angewendet lassen sich auf diesem Weg auch die Fuses aus den betreffenden Chips lesen und wieder zurück schreiben - falls nötig.

Svenp:
@agmue

Vielen Dank für den Hinweis, genau das ist es was ich vermisst habe.
Dann werde ich beim nächsten flashen die Ausgabe einschalten mir mir die Zeilen sichern.

Alternativ die portable Installation durchführen!
Den Brocken kann man dann komplett sichern, mit Libs usw.

Den Brocken kann man dann komplett sichern, mit Libs usw.

Muss man sogar (und "usw." wäre die komplette Arduino Installation), zumindest formal gesehen.

Auf jeden Fall sollte man, wenn man sich etwas als Quellcode archiviert, die Version der IDE und der Libs merken, und diese möglichst auch archivieren. Wer weiß, wie lange es das Internetz noch gibt :slight_smile:

Da ist es eigentlich einfacher, sich nur die .hex zu speichern, auch wenn man dieser überhaupt nicht ansehen kann, was (und welche Version davon) es ist. Oder gar später daran Anpassungen vornehmen.

RudiDL5:
Die von @agmue gelieferten Informationen sind korrekt und funktionieren -

Danke für die Bestätigung :slight_smile:

Hallo, ja hat wirklich funktioniert.
Werde mir ab jetzt die Hex files immer sichern.
Der Aufruf zum flashen ist ja bis auf wichtige Kleinigkeiten wie com Port und Hex file immer der gleiche.