Forum: Mikrocontroller und Digitale Elektronik Hexfile für Mikrokontroller


von Steffan (Gast)


Lesenswert?

Moin,

Kann mir einer erklären, wozu man in einer Entwicklungsumgebung für 
embedded Systeme die Option "Create Hex File" braucht?

gruß

von H.K.O.G (Gast)


Lesenswert?

Mit dem Hex-File kannst Du z.B. in der Produktion Deine Controller 
programmieren.

von Falk B. (falk)


Lesenswert?

@  Steffan (Gast)

>Kann mir einer erklären, wozu man in einer Entwicklungsumgebung für
>embedded Systeme die Option "Create Hex File" braucht?

Auf die Gefahr hin, mal wieder einem Troll zum Opfer zu fallen, sag ich 
trotzdem mal.

"Create Hex File" ist der Ganze sinn der Entwicklungsumgebung, denn 
damit wird letztendlich die Datei erzeugt, welche in den Mikrocontroller 
programmiert wird.

von amateur (Gast)


Lesenswert?

Ich gehe mal davon aus, dass das vielfach noch Gewohnheit ist.

Anno Toback, als dieses Format entwickelt wurde, gab es mehrere Gründe 
dafür.
1. Es berücksichtigte ein paar Eigenheiten der Intelprozessoren. 
(Offset-
   und Segment-Adressierung)
2. Es ist im Grunde ein ASCII-/Textformat. Früher gab es oft Probleme
   Binärdaten zu übertragen.
3. Es ist ein sicheres Format. (Prüfsummen)
4. Es ist ein kompaktes Format.
5. Es enthält die wichtigsten Strukturinformationen.

Heute ist es wohl so ähnlich wie mit dem englischen. Natürlich kann man 
auch in der russischen Sprache alles ausdrücken, aber man hat sich nun 
mal in diesem, unserem Bereich aufs englische Festgelegt.

Solange es keinen triftigen Grund gibt etwas anderes zu verwenden...
Was dann auch alle verstehen...

Grundsätzlich kann jeder einen neuen Vorschlag einbringen, dass heißt 
aber noch lange nicht, auch wenn er erkennbar besser ist, das ihn 
irgendwer verwendet.

Das "Bekannte" hält sich nun mal.

von Bronco (Gast)


Lesenswert?

Steffan schrieb:
> Kann mir einer erklären, wozu man in einer Entwicklungsumgebung für
> embedded Systeme die Option "Create Hex File" braucht?

Weil ein Echter Programmierer (tm) ein Hexfile lesen kann wie 'ne 
Zeitung. Du etwa nicht?

von ProblemKind (Gast)


Lesenswert?

Sry Threadstarter, ich frag hier jetzt einfach mal:
Warum eigentlich nicht BIN-Format? Ich persönlich tu mich bei zwei-, 
lder dreistelligen Hex-Formaten, sowas wie 0xFFF schwieriger wie im 
Binärformat

von Wilhelm F. (Gast)


Lesenswert?

Steffan schrieb:

> Kann mir einer erklären, wozu man in einer Entwicklungsumgebung für
> embedded Systeme die Option "Create Hex File" braucht?

Ja, stimmt. ;-)

Es gab auch schon µC, bei denen man den Quellcode downloaden konnte. Die 
hatten dann einen Hochsprache-Interpreter im festen ROM. Der 
8052-AH-BASIC beispielsweise.

Ich selbst habe sowas nie benutzt, und Kommentare und Leerzeichen dürfen 
in den Dateien wohl auch nicht vorhanden sein.

Man brauchte also gar keinen Compiler auf dem PC, keine 
Entwicklungsumgebung, nur einen Texteditor. Und hat den Inhalt quasi 
geflasht.

von Peter II (Gast)


Lesenswert?

ProblemKind schrieb:
> Warum eigentlich nicht BIN-Format?

und wo steckt du die Prüfsummen hin? Oder die Adressen wohin die Daten 
geschrieben werden soll?

von amateur (Gast)


Lesenswert?

Ganz so einfach ist das Hex-Format nun auch nicht.
Lesen geht ja noch, die wenigsten können aber die Prüfsummen im Kopf 
bilden.
Darüber hinaus kann fast kein Prozessor etwas mit dem Hex-File anfangen. 
Du schickst es ja zum Programmiergerät, das weiß dann was zu tun ist. 
Z.B. im Flash erscheinen dann ja "echte" Binärdaten.
Warum nicht einfach Binärdaten: Ich denke das ist selbsterklärend. Vor 
dem Brennen braucht das Programmiergerät so simple Infos wie: Wie viel, 
wohin und so. Vor allem, wenn du dir einen eventuellen Bootloader nicht 
zerschießen willst, ist das echt toll.

von Wilhelm F. (Gast)


Lesenswert?

amateur schrieb:
> Ganz so einfach ist das Hex-Format nun auch nicht.
> Lesen geht ja noch, die wenigsten können aber die Prüfsummen im Kopf
> bilden.
> Darüber hinaus kann fast kein Prozessor etwas mit dem Hex-File anfangen.
> Du schickst es ja zum Programmiergerät, das weiß dann was zu tun ist.
> Z.B. im Flash erscheinen dann ja "echte" Binärdaten.
> Warum nicht einfach Binärdaten: Ich denke das ist selbsterklärend. Vor
> dem Brennen braucht das Programmiergerät so simple Infos wie: Wie viel,
> wohin und so. Vor allem, wenn du dir einen eventuellen Bootloader nicht
> zerschießen willst, ist das echt toll.

Das Hex-Format, ob es nun Intel oder Motorola S1 oder S2 oder S3 oder 
S19 oder S37 ist, hat erst mal auch das Download-Protokoll mit drin. Was 
da aber übertragen und ausgewertet wird, ist das Programm, wie eine EXE 
auf dem PC.

Man kann sich diese Dateien ja auf einem Editor anschauen. Zwischen den 
Steuerbytespalten befindet sich original der Code in Maschinencode. Aber 
noch im ASCII-Format, was im Bootloader zu Zeichen umgewandelt wird. Da 
steckt auch Redundanz mit drin.

von amateur (Gast)


Lesenswert?

Ich bin mir nicht ganz sicher, was Du unter Download-Protokoll 
verstehst.
Zum Intel-Hex-Format ein einfaches Beispiel:

Wenn du im Flash ab der Adresse
0x1234

die Werte
0x56 und 0x78

ablegen willst, so mußt du folgende Sequenz zum Programmiergerät 
schicken:

:021234005678EA   Daten
:00000001FF       EOF-Sequenz

aufgedöselt bedeutet dies:

: 02 1234 00 5678 EA
: 00 0000 01 FF

Der Doppelpunkt ist der Zeilenanfang.
Der nächste Wert gibt die Anzahl an Datenbytes an (nicht Zeichen)
-Hier zwei bzw. keine
Es folgt die Adresse, an der die Daten abgelegt werden sollen.
-Hier 1234 bzw keine
Nun kommt der Datentyp
-00 "Normale" Daten, 01 EOF-Kennung, mir sind die Datentypen 02, 03, 04
     und 05 bekannt
Nun kommen die Daten
-Hier 56 und 78, EOF (keine Daten)
Als letztes folgt eine Prüfsumme
-Hier EA und FF jeweils für die Zeile, in der Sie stehen.

Dein Programmiergerät sollte jetzt:
1. Alle Bytes zwischen 0x0000 und 0x1233 in Ruhe (Unverändert) lassen.
2. An Position 0x1234 den Wert 0x56 schreiben.
3. An Position 0x1235 den Wert 0x78 schreiben.
4. Alle folgenden Bytes lassen wie sie sind.
5. Feierabend machen.

Wie man diese Sequenz, mit vernünftigem Aufwand, in einem Binärformat 
realisieren kann ist mir nicht ganz klar.

von Edson (Gast)


Lesenswert?

Falk Brunner schrieb:
> @  Steffan (Gast)
>
>>Kann mir einer erklären, wozu man in einer Entwicklungsumgebung für
>>embedded Systeme die Option "Create Hex File" braucht?
>
> Auf die Gefahr hin, mal wieder einem Troll zum Opfer zu fallen, sag ich
> trotzdem mal.

Ausnahmsweise glaube ich mal, du liegst hier falsch.

> "Create Hex File" ist der Ganze sinn der Entwicklungsumgebung, denn
> damit wird letztendlich die Datei erzeugt, welche in den Mikrocontroller
> programmiert wird.

Genau wie hier, setzt man die IDE zur Entwicklung einer Library ein, 
benötigt man auch kein Hex-File. Daher macht es durchaus Sinn, dies (wie 
z.B. Keil uVision4) als Option anzubieten.

Gruß,
Edson

von amateur (Gast)


Lesenswert?

Stimmt und stimmt gleichzeitig auch nicht.

Der Sinn einer IDE ist es, möglichst komfortabel einen Prozessor zu 
programmieren und tatsächlich nicht ein Hex-File zu generieren.

...aber

Am Beispiel einer Textverarbeitung:
Der Sinn der Textverarbeitung ist es Texte zu schreiben. So weit - so 
gut.
Manche Leute verspüren aber den nicht zu unterdrückenden Wunsch, diese 
auch auszudrucken. Aus diesem Grunde haben die Programmierer eine 
Schnittstelle zu einem Drucker implementiert. Oft PLC5, Postscript oder 
wie die Protokolle auch immer heißen. Wie ein Drucker funktioniert 
interessiert an dieser Stelle nicht. Welchen Drucker Du verwendest auch 
nicht. Du übergibst einfach Daten, in einem standardisierten Format - 
und nach mir die Sintflut.

Es gibt nicht nur „deine“ Entwicklungsumgebung, manche lieben die 
Kommandozeile und den GNU-Compiler der u.U. versteckt unter deiner IDE 
lauert und die Programmierer derselben haben bestimmt keine Lust eine 
Schnittstelle zu jedem möglichen Programmiergerät zu schaffen. Also 
verwendet man ein Standartprotokoll. Das schreibt man einmal und die 
Sache ist gegessen.

Natürlich ist es jetzt die Aufgabe eines Programmieradapterherstellers, 
seinen Adapter an die „üblichen“ Datenprotokolle anzupassen. Auch die 
sind glücklich, wenn sie mit einem Protokoll möglichst viele Kunden 
erreichen.

Übrigens das schließt nicht aus das es andere Protokolle gibt, die
vielleicht viel besser sind. Die eine oder andere Umgebung stellt dann 
auch diese zur Verfügung. Manchmal auch nur einen Konverter. Sind 
nämlich alle Informationen vorhanden, so ist eine Konvertierung meist 
kein Problem.

Wie auch immer: Einfach binär raus reicht nicht aus - man kann sich aber 
über das Format streiten.

von Wilhelm F. (Gast)


Lesenswert?

amateur schrieb:

> Ich bin mir nicht ganz sicher, was Du unter Download-Protokoll
> verstehst.
>
> Zum Intel-Hex-Format ein einfaches Beispiel:
> Wenn du im Flash ab der Adresse
> 0x1234
> die Werte
> 0x56 und 0x78
> ablegen willst,

Du mußt mir das nicht erklären. ich mache und kann das alles. Schon 
lange.

Ein File mit Maschinencode braucht man aber auf jeden Fall, immer. Dafür 
ist ja der Compiler da, um es zu machen.

von µC-Urgestein (Gast)


Lesenswert?

Steffan schrieb:
> Kann mir einer erklären, wozu man in einer Entwicklungsumgebung für
> embedded Systeme die Option "Create Hex File" braucht?

Weil die Aufteilung des Speicherinhaltes in Hex-Zeichen wesentlich 
besser zur übersichtlichen Byte-Darstellung geeignet ist, als z.B. ein 
Binärdarstellung oder die früher auch verwendete Oktaldarstellung.
Die Datei braucht man nur, wenn man das System nicht direkt aus der 
Entwicklungsumgebung programmieren will, sondern dazu einen separaten 
Programmierer verwenden möchte/muß - darum auch Option.

von Reinhard Kern (Gast)


Lesenswert?

Wo bitte enthält ein Binärfile die Adresse, wohin die Daten geladen bzw. 
programmiert werden sollen? Von Sicherung gegen Fehler mal ganz 
abgesehen.

Gruss Reinhard

von Vlad T. (vlad_tepesch)


Lesenswert?

elf oder coff ist auch ein Binätformat und so viel besser, als intel 
hex.

Binärformat muss ja nicht heißen, dass nur die Rohdaten enthalten sein 
müssen.

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.