Forum: Mikrocontroller und Digitale Elektronik Atmel Studio + Mk2 .hex auslesen


von Samuel P. (mo3bius)


Lesenswert?

Hi,

ich habe ein custom Board mit atmega16. Diesen möchte ich mit einer 
neuen Firmware flashen, die alte aber unbedingt vorher speichern. 
Sollten Fehler auftreten, muss diese wieder geflasht werden.

Mein Problem:

Die ausgelesene Datei ist 45 kbyte groß?! Kann das sein? Ich war der 
Ansicht die sollte nicht größer als 16 k sein.

Grüsse,
Moebius

von Peter II (Gast)


Lesenswert?

Samuel P. schrieb:
> Die ausgelesene Datei ist 45 kbyte groß?! Kann das sein? Ich war der
> Ansicht die sollte nicht größer als 32 k sein.

schon mal reingeschaut in die Datei?

1 Byte sind mindestens 2byte in der Hex Datei.

von Karl H. (kbuchegg)


Lesenswert?

Samuel P. schrieb:

> Die ausgelesene Datei ist 45 kbyte groß?! Kann das sein?

Das passt sogar recht genau.

In einer Hex-Datei, die ja nichts anderes als ein Text-Datei mit einem 
bestimmten Aufbau ist, werden üblicherweise pro Zeile 16 Original-Bytes 
beschrieben. Zählt man, wieviele Zeichen dafür notwendig sind (inklusive 
dem Zeilencorschub mittels 0x0D 0x0A) dann landet man bei 45 Zeichen pro 
Zeile.

Dein Mega 16 hat 16kB und wenn ich wieder davon ausgehe, dass pro 
Textzeile 16 Bytes beschrieben werden, dann benötigt dieser 
Speicherinhalt daher 1000 Zeilen in der Hex-Datei.
Pro Zeile werden 45 Zeichen benötigt, d.h. die 1000 Textzeilen benötigen 
45000 Bytes

von Samuel P. (mo3bius)


Lesenswert?

Danke für die ausführliche Antwort!

Ja, in der Datei sind 1025 Zeilen. Ich war nur verwundert, da wenn ich 
eine .hex erstelle diese immer sehr viel kleiner ist.

Zum Abschluss: Hat jemand schon mal eine solche ausgelesene datei 
zurückgespielt? Sind hier Probleme zu erwarten bzw. muss die Datei 
vorher aufbereitet werden?

Grüsse,
Moebius

von Karl H. (kbuchegg)


Lesenswert?

Samuel P. schrieb:
> Danke für die ausführliche Antwort!
>
> Ja, in der Datei sind 1025 Zeilen. Ich war nur verwundert, da wenn ich
> eine .hex erstelle diese immer sehr viel kleiner ist.

Das ist aber auch kein Wunder.
Denn deine Erstellwerkzeuge wissen ja, wie gross dein Programm ist. D.h. 
da steht in der Hex-Datei nur der Teil drinnen, der auch tatsächlich das 
Programm beinhaltet. Ist dein Programm tatsächlich nur 1kB gross, dann 
gibt es keinen wirklichen Grund, die restlichen 15kB "Leer"bytes in die 
Hex-Datei mit reinzugeben. Wird der Inhalt, der dieses 1kB 
repräsentiert, in den µC gebrannt, dann ist damit das komplette Programm 
übertragen worden.

Wenn man aber vom µC zurück liest, dann weiß man ja a priori nicht, 
welche Teile des Flash tatsächlich benötigt werden und welche nicht. Die 
Brennprogramme lesen daher auf jeden Fall die vollen 16kB aus und 
speichern die in die Datei.

> Zum Abschluss: Hat jemand schon mal eine solche ausgelesene datei
> zurückgespielt? Sind hier Probleme zu erwarten bzw. muss die Datei
> vorher aufbereitet werden?

Muss nicht aufbereitet werden. Das wäre sonst ein wenig witzlos.
Das Brennprogramm holt ein 1:1 Speicherabbild vom Flash in die Hex-Datei 
und beim erneuten wiedereinspielen wird dieses 1:1 Speicherabbild auch 
wieder in den Flash geschrieben. Unabhängig davon, was der 
Speicherinhalt tatsächlich darstellt.

von Samuel P. (mo3bius)


Lesenswert?

Alles klar danke für die Infos.

von Mike (Gast)


Lesenswert?

Samuel P. schrieb:
> Ja, in der Datei sind 1025 Zeilen. Ich war nur verwundert, da wenn ich
> eine .hex erstelle diese immer sehr viel kleiner ist.

Dann guck dir mal die heruntergezogene Datei an. Der Zeileninhalt wird 
stellenweise ausgesprochen langweilig sein. Außer der Adresse und der 
Prüfsumme werden die Zeilen über die ungenutzen Bereiche des Flash 
idenisch sein.
Hier noch ein bisschen Lesestoff
http://de.wikipedia.org/wiki/Intel_HEX

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.