Forum: Mikrocontroller und Digitale Elektronik Hex oder Bin File ?


von Hans L. (holzwurm56)


Lesenswert?

Hallo ,
ich blicke mal wieder nicht durch und brauche Hilfe .
Ich benutze Basccom und bekomme beim compilieren eine Hex und eine Bin 
Datei.
Die HexDatei ist ca 3 x so groß wie die Bin . Kann man auch die BinDatei 
in den MC laden ? Hat ein AtMega8 einen Speicher für 8kB Bin oder 8kB 
Hex ?
Ich habe schon in anderen Quellen gesucht aber keine richtige Antwort 
erhalten .

MfG

Hans

von Peter II (Gast)


Lesenswert?

Hans Lang schrieb:
> Ich habe schon in anderen Quellen gesucht aber keine richtige Antwort
> erhalten .

dann hast du etas überlesen:

http://de.wikipedia.org/wiki/Intel_HEX

von Reinhard Kern (Gast)


Lesenswert?

Hans Lang schrieb:
> Hat ein AtMega8 einen Speicher für 8kB Bin oder 8kB
> Hex ?

Der wesentliche Inhalt ist der gleiche, Hex ist nur eine andere 
Darstellung, die aber ein paar Vorteile hat:

1. Textdatei, mit Editor lesbar - für BIN braucht man einen Hex-Editor, 
und dann sieht die Anzeige ganz ähnlich aus wie beim HEX File sowieso.

2. Gesichert: nach jeder Datenzeile folgt eine Prüfsumme.

3. Zusatzinformationen: es können ausser dem direkten Speicherinhalt 
auch Adressinformationen enthalten sein, ein BIN File hat keine, da muss 
man wissen, wohin es zu laden ist, wenn das eine andere Adresse als 
000000 ist. Es sind auch zusätzliche Angaben möglich wie Datum, Version, 
Kommentare, aber das wird selten benutzt.

Ob man 8 kB BIN oder HEX lädt ist egal, der Inhalt muss danach exakt der 
gleiche sein, sonst ist eine der Dateien fehlerhaft.

Gruss Reinhard

von Dietrich L. (dietrichl)


Lesenswert?

Reinhard Kern schrieb:
> Ob man 8 kB BIN oder HEX lädt ist egal, der Inhalt muss danach exakt der
> gleiche sein, sonst ist eine der Dateien fehlerhaft.

Nicht ganz. BIN ist lückenlos ab der Startadresse, bei HEX können Lücken 
sein. Was an den Stellen dann steht, hängt von der Vergangenheit des 
Speichers ab, ist bzgl. der Funktion aber egal.
Anwendungsbeispiel: am Ende des Programmspeichers wird die 
Versionsnummer abgelegt.

Gruß Dietrich

von Hans L. (holzwurm56)


Lesenswert?

Hallo ,
wenn ich das jetzt richtig verstanden habe wird bei der Hex-Datei nur 
der "Datenanteil" in den MC übertragen . Es kann eine Datei mit z. B. 
20kB in einen ATMega 8 passen ?

MfG

Hans

von Karl H. (kbuchegg)


Lesenswert?

In einer Hex-Datei steht drinnen

"Ab Adresse 0x0000 kommen 8 Bytes mit den Werten 0x00, 0x40, 0x80, 0x18, 
0x23, 0x78, 0x98, 0xA0. Das macht eine Quersumme von 0x87
Ab Adresse 0x0008 kommen 5 Bytes mit den Werten 0xFF, 0x87, 0x43, 0xFF, 
0x00, mit der Quersumm von 0xA4"

(ok, nicht so in Prosa sondern in Form von Codezahlen, aber im Prinzip 
läuft es darauf hinaus)

In der Bin Datei steht drinnen (als Binärzahlen)
0x00 0x40 0x80 0x18 0x23 0x78 0x98 0xA0 0xFF 0x87 0x43 0xFF 0x00
(also ein File mit einer Länge von 13 Bytes)


Klar ist die HEX-Form 'geschwätziger'. Die Nutz-Information in ihr ist 
allerdings 1:1 dieselbe wie in der BIN-Datei. Nur eben in einer anderen 
Form präsentiert


Als Daumenregel kann man sagen:
Nimm die Größe deiner HEX-Datei, dividiere durch 2.5 und du hast 
ungefähr die tatsächliche Anzahl an Bytes, die dann tatsächlich gebrannt 
werden. Bei 20K sind also ungefähr 8KB (+- ein paar Zerquetschte) an 
Nutzbytes im Hex-File.

von Sascha W. (sascha-w)


Lesenswert?

Hans Lang schrieb:
> Hallo ,
> wenn ich das jetzt richtig verstanden habe wird bei der Hex-Datei nur
> der "Datenanteil" in den MC übertragen.
jain,
die Datei im HEX oder BIN Format, wird nicht in den µC geladen, sondern 
ist nur der Weg vom Compiler zum Brennprogramm. Das Brennprogramm 
schreibt dann die entsprechenden Binärdaten, die in beiden Dateien 
identisch enthalten sind, in den µC.

> Es kann eine Datei mit z. B.
> 20kB in einen ATMega 8 passen ?
ja das kann sie.
Wieviel Platz dein Programm braucht, sollte dir aber auch dein Compiler 
anzeigen können.

Sascha

von c-hater (Gast)


Lesenswert?

Reinhard Kern schrieb:

> 3. Zusatzinformationen: es können ausser dem direkten Speicherinhalt
> auch Adressinformationen enthalten sein, ein BIN File hat keine, da muss
> man wissen, wohin es zu laden ist, wenn das eine andere Adresse als
> 000000 ist. Es sind auch zusätzliche Angaben möglich wie Datum, Version,
> Kommentare, aber das wird selten benutzt.

Mehr noch: Bei Hex-Files sind Overlays möglich. Im Ziel landet natürlich 
für jede Adresse nur der im Hexfile zuletzt aufgeführte Inhalt. Aber 
nicht notwendigerweise ist ja das Flashen des Ziels direkt der Endzweck 
des Hexfiles.

Mit dieser Eigenschaft kann man z.B. eine Art primitiven "Linker" für 
Spezialanwendungen basteln. Also insbesondere auf einfache Weise 
Informationen in den Code einfügen, die zum Zeitpunkt der 
Programmerstellung noch garnicht verfügbar waren, sondern erst zum 
Zeitpunkt des Flashens verfügbar werden, wobei der "Flasher-Guy" nur das 
Hexfile hat und auch nur dieses bekommen soll und nicht etwa den 
kompletten Quelltext samt Entwicklungsumgebung. Einfach nur deshalb, 
weil er damit sowieso nicht wirklich etwas anfangen könnte...

Übrigens wird das Overlay-Feature in Hexfiles auch ohne eine solche 
"Spezialanwendung" tatsächlich praktisch benutzt, nämlich z.B. vom 
Atmel-AssemblerV2, jedenfalls wenn man dessen OVERLAP-Direktive benutzt 
und dann auch tatsächlich einen solchen produziert.

Auch das kann durchaus nützlich sein. Damit lassen sich Sachen recht 
einfach und doch einigermaßen zuverlässig realisieren, die mit einem 
normalen Linker erst garnicht möglich sind. Nunja, hier muß natürlich 
der Ehrlichkeit halber auch erwähnt werden, daß sowas auch eher unter 
dem Begriff "Spezialanwendung" zusammenzufassen wäre...

Ich persönlich nutze es aber tatsächlich. Sogar fast bei jedem Projekt. 
Auf jeden Fall bei jedem Projekt, in dem irgendwo ein "sei" vorkommt.

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.