Intel Hex-Format
Da praktisch alle Mikrocontroller-Toolketten den Code in der endgültigen Form im Intel-Hex-Format ausgeben können, möchte ich hier kurz auf das Dateiformat eingehen:
Für das Intel-Hex-Format gibt es 2 Versionen: eine 20 Bit-Version (1 MB Adreßraum) und eine 32 Bit-Version (4 GB Adreßraum). Die Datei ist in mehrere Records, welche jeweils einer Zeile entsprechen, aufgeteilt. Allgemein sieht jeder Record folgendermaßen aus:
: |
length |
offset |
type |
content |
checksum |
|
Bytes |
1 |
1 |
2 |
1 |
n |
1 |
Bedeutung der Felder
: Header
length Länge der Information in Bytes im Content-Feld
offset Start-Offset (Absolutadresse), von dem aus Datenblöcke geladen werden. Entspricht den Bits A0-A15 der Absolutadresse.
type Typ des Records. Folgende Typen existieren:
00 Daten-Record
01 Dateiende-Record (letztes Record)
02 Segment-Adressrecord (20 Bit Version)
03 Programm-Startadresse (20 Bit Version)
04 Linear-Adressrecord (32 Bit Version)
05 Programm-Startadresse (32 Bit Version)
content Information, abhängig vom Record-Typ:
00 Daten (Länge der Daten steht im length-Feld)
01 0 Bytes (Keine Information im Feld content)
02 2 Bytes Segmentadresse = Bits A19-A4 der Absolutadresse
03 4 Bytes Absolutadresse: Programm-Startadresse
04 2 Bytes Segmentadresse = Bits A31-A16 der Absolutadresse
05 4 Bytes Absolutadresse: Programm-Startadresse
checksum Prüfsumme: Aus der Summe der vorangegangenen Bytes (von length bis Content) modulo 256 wird das 2er Komplement gebildet.
Die Adresse eines Datenbytes setzt sich folgendermaßen zusammen:
32-Bit Segmentadresse <16 + Offset + Index
20-Bit Segmentadresse <4 + Offset + Index
wobei Index der laufende Index der Datenbytes ist (Erstes Byte: Index=0). Da bei Mikrocontrollern nach Reset die Programm-Startadresse immer 0 ist, sind die Programm-Startadreß-Records nur von geringer Bedeutung.