Intel hex fájl formátum leírás, pc, programozás

Ez a cikk a fordítás Intel dokumentum „hexadecimális Object File Format Specification” - a leírása a széles körben elterjedt szöveges formátumban bináris adatok tárolására (Intel HEX formátum). A szöveg a közös kifejezés „hexadecimális objektumfájl”, amely valóban megfelel egy bizonyos mikrokontroller firmware (pl firmware fájl AVR mikrovezérlő. Hosszabbító HEX) t. E. értelme, hogy csak HEX-fájlt.







Ez a dokumentum leírja a formátum a hexadecimális objektum fájl 8-, 16- és 32-bites Intel processzorokat. Hexadecimális formátumban használható bemeneti PROM programozó vagy hardver emulátor.

A fordító megjegyzése: Mivel az Intel HEX formátumú régóta szabvány de facto, akkor használják az adatok tárolására és a kódot, szinte kivétel nélkül Beágyazott (beágyazott) architektúrák mikrokontroller és a feldolgozók, nem csak az Intel x86 processzorok.

A fordító megjegyzése: 8, 16 és 32 bites formátumban különböznek egymástól csak a logikai szerkezet, azaz a megjelenés a HEX-fájl rögzíti különféle (fajta feljegyzések, lásd alább.) ... Az általános formátum HEX-fájlkódolástól, és feljegyzéseket tartalmaz, azonban változatlan marad.

Hexadecimális bináris kódolású alfanumerikus ASCII karaktereket. Például, 8-bites bináris értéke 00.111.111 felel meg hexadecimális 3F. Kódolni ezt az értéket ASCII használjon 2 bájtos ASCII karaktereket. Az első bájt kódoló példánkban egyenlő lesz ASCII-karakter „3” (bináris formában 00.110.011 vagy 033H), és a második bájt egyenlő ASCII-karakter „F” (01.000.110 vagy 046H). Minden bájt értékét annak érdekében hexadecimális számjegy követi mindig úgy, hogy az első számjegy is. ASCII-képviselete a bináris kód mindig szükség van 2-szer több adatot byte, mint a bináris adatok.

Az ábra egy példát mutat a tartalmát HEX-fájl.

Intel hex fájl formátum leírás, pc, programozás

A fordító megjegyzése: lehet, nem kell az összes rekordot az egyes processzor. Például AVR mikrokontrollerek valójában csak adatjegyzék és End of File Record rekord típusok. GCC linker is hozzáteszi fájl AVR rekord Kezdet Segment Cím Record (vége felé a fájlt), de ez a rekord általában nem használják (nem tartalmazza a firmware a mikrokontroller programozó).

[Általános felvételi formátum (General Record Format)]

Minden bejegyzés a HEX-fájlt (vonal) kezdődik a területen markere az elején a felvételi rekordot jelet. tartalmazó ASCII-kód 03AH, kettőspont ':'.

Következő RECLEN területén minden rekordot. amely meghatározza a bájtok számát hasznos információt tartalmaz a rekord (ezek bájt, hogy kövesse a mező RECTYP). Ne feledje, hogy egy byte adat által képviselt két ASCII karaktereket. A maximális érték a mező RECLEN hexadecimális „FF”, t. E. A hasznos adatok a rekord lehet 0 és 255 bájt.

A következő mező minden rekordot RECTYP. ami azt jelzi, hogy milyen típusú ez a bejegyzés. RECTYP mező használható információ rögzítésére értelmezést. Itt van, hogy kódolt rekord típusok:

A következő mező minden rekord változó hosszúságú, INFO / DATA mezőben. Ez áll a nulla vagy több byte (bájt lehet 0 és 255, összhangban RECLEN mező értéke), ahol minden egyes bájt van kódolva, mint egy pár hexadecimális számjegy. Az értelmezés ezen a területen függ mező értéke RECTYP.

Végül minden rekord végén egy területen CHKSUM. amely tartalmazza a hexadecimális ASCII az ellenőrző (felül további két kód, kettes komplemens összege) az összes olyan bejegyzés bájtok befogadó a területen RECLEN, és befejezve, és többek között az utolsó byte-INFO / DATA mezőben. Ebben ellenőrző számítjuk nem az ASCII karakter maga, de a nézetet mindegyik pár ASCII HEX-karakter, mint egy bájt. Így, az összeg az összes A párokat a felvétel átalakítása után mindegyik pár a bináris ábrázolása terén RECLEN befogadó hogy CHKSUM mező befogadó, egyenlő 0.

[Bővített Lineáris Cím Record (csak 32 bites formátum)]

(LBA + DRLO + DRI) MOD 4G

Amennyiben DRLO is betölt OFFSET mezôre adatrekord, DRI egyenlő az index a bájt a Data Record felvételt.

Ha a Kiterjesztett Linear Cím Record bejegyzés határozza meg LBA érték, bárhol megjelenhetnek a 32 bites hexadecimális objektum fájl. Ez az érték érvényben marad egy másik rekordot Extended Linear Cím Record. Az alapértelmezett érték az LBA nulla, míg a felvétel Extended Linear Cím Record.

A fordító megjegyzése: a HEX-fájlok belépési AVR Extended Linear Cím Record alkalmazunk.

Egyes területeken, van egy rekord a következő tartalommal:

RECORD MARK
Ez a mező tartalmazza egy byte 03AH, vastagbél kódolt hexadecimális ASCII karakter ( ':').







RECLEN
Ez a mező két bájt 03032H kódoló hexadecimális ASCII jeleket „02”, azaz a hossza byte adat információ Ulba szereplő, ezt a rekordot.

LOAD OFFSET
Ez a mező tartalmazza a byte 030303030H kódolás hexadecimális ASCII jeleket „0000”, mivel a mező nem használt ezt a rekordot.

RECTYP
Ez a mező tartalmazza 03034H byte hexadecimális kódolása ASCII „04”, amely meghatározza a típusú rögzítési kibővített lineáris Cím Record.

CHKSUM
Ez a mező tartalmazza az ellenőrző RECLEN mezők, LOAD OFFSET, RECTYP és Ulba.

[Bővített Segment Cím Record (16 vagy 32 bites formátumban)]

SBA + ([DRLO + DRI] MOD 64K)

Amennyiben DRLO is betölt OFFSET területén a Data Record, DRI egyenlő az index a bájt a Data Record.

Ha a Kiterjesztett Segment Cím Felvétel Felvétel SBA beállítja az értéket akkor jelenik meg bárhol a 16 bites hexadecimális objektum fájl. Ez az érték érvényben marad egy másik rekordot Extended Segment Cím Record. SBA alapértelmezett értéke 0, amíg a bejegyzés Extended Segment Cím Record.

A fordító megjegyzése: a HEX-fájlok belépési AVR Extended Segment Cím Record alkalmazunk.

Egyes területeken, van egy rekord a következő tartalommal:

RECORD MARK
Ez a mező tartalmazza egy byte 03AH, vastagbél kódolt hexadecimális ASCII karakter ( ':').

RECLEN
Ez a mező két bájt 03032H kódoló hexadecimális ASCII jeleket „02”, azaz a hossza byte adat információ USBA szereplő, ezt a rekordot.

LOAD OFFSET
Ez a mező tartalmazza a byte 030303030H kódolás hexadecimális ASCII jeleket „0000”, mivel a mező nem használt ezt a rekordot.

RECTYP
Ez a mező tartalmazza 03032H byte hexadecimális kódolása ASCII „02”, amely meghatározza a típusú rögzítési Extended Segment Cím Record.

CHKSUM
Ez a mező tartalmazza az ellenőrző RECLEN mezők, LOAD OFFSET, RECTYP és USBA.

[Adatrekord (8, 16 vagy 32-bites formátumú)]

A fordító megjegyzése: Ez az üzenet - elsődleges a HEX file AVR firmware. Általában egy ilyen rekord (sor) kódolt 16 byte firmware programkód (a RECLEN mező értéke „10”). Az utolsó sorban a adatjegyzék HEX fájl tartalmazhat kevesebb, mint 16 bájt (a megfelelő érték jelenik meg RECLEN mező).

Egyes területeken, van egy rekord a következő tartalommal:

RECORD MARK
Ez a mező tartalmazza egy byte 03AH, vastagbél kódolt hexadecimális ASCII karakter ( ':').

RECLEN
Ez a mező tartalmazza a két ASCII hexadecimális számjegyek számát adja meg byte adatot rögzíti. A maximális érték „FF” vagy 04646H (ami megfelel a decimális értéket 255).

RECTYP
Ez a mező tartalmazza 03030H byte kódoló hexadecimális ASCII karakterek „00”, amely meghatározza, hogy milyen típusú rekord adatjegyzék.

DATA
Ez a mező tartalmazza ASCII hexadecimális számjegy van, ahol minden pár kódol egy bájt adatot.

CHKSUM
Ez a mező tartalmazza az ellenőrző RECLEN mezők, LOAD OFFSET, RECTYP és adatokat.

[Start Lineáris Cím Record (32 bites formátum)]

A fordító megjegyzése: a HEX-fájlok AVR rekord Kezdet Linear Cím Record alkalmazunk.

Egyes területeken, van egy rekord a következő tartalommal:

RECORD MARK
Ez a mező tartalmazza egy byte 03AH, vastagbél kódolt hexadecimális ASCII karakter ( ':').

RECLEN
LRA mező 03034H, kódolás „04” hexadecimális ASCII karaktereket, ami azt jelzi, hossza bájtban EIP regiszter tartalmát ezt a rekordot.

LOAD OFFSET
Ez a mező tartalmazza 030303030H, kódolása „0000” hexadecimális ASCII karaktereket, mivel ezen a területen nem használják a felvételt.

RECTYP
Ez a mező tartalmazza 03035H kódoló hexadecimális ASCII jeleket „05”, amely meghatározza a Start Linear Cím Record típusú bejegyzések.

CHKSUM
Ez a mező tartalmazza az ellenőrző RECLEN mezők, LOAD OFFSET, RECTYP és EIP.

[Kezdés Segment Cím Record (16 vagy 32 bites formátumban)]

Egyes területeken, van egy rekord a következő tartalommal:

RECORD MARK
Ez a mező tartalmazza egy byte 03AH, vastagbél kódolt hexadecimális ASCII karakter ( ':').

RECLEN
LRA mező 03034H kódoló hexadecimális ASCII jeleket „04”, ami azt jelzi, hossza bájtban tartalmának CS / IP regiszterek ezt a rekordot.

LOAD OFFSET
Ez a mező tartalmazza 030303030H, kódolása „0000” hexadecimális ASCII karaktereket, mivel ezen a területen nem használják a felvételt.

RECTYP
Ez a mező tartalmazza 03033H kódoló hexadecimális ASCII jeleket „03”, amely meghatározza a Start-szegmens Cím Record típusú bejegyzések.

CS / IP
Ez a mező tartalmazza a nyolc karakter ASCII hexadecimális számok tartalmát mutató a 16-bites regiszter és a CS 16 bites IP-nyilvántartásban. A felső bájt regiszter tartalmát CS párosítva szimbólumok a 10. és 11., Jr. egy pár szimbólumok a 12. és 13. A magas bájtos IP regiszter tartalmát tárolja a pár szimbólumok a 14. és 15., Jr. karakter pár 16 és 17.

CHKSUM
Ez a mező tartalmazza az ellenőrző RECLEN mezők, LOAD OFFSET, RECTYP és CS / IP.

[End of File Record (8, 16 vagy 32-bites formátumú)]

Felvétel End of File Record végét jelzi hexadecimális objektum fájl. Ez egy szöveg, amely a karakterek: 00000001FF ".

A fordító megjegyzése: Az AVR HEX-fájlokat, ez rekord jelölésére is a végén a fájlt.

Egyes területeken, van egy rekord a következő tartalommal:

RECORD MARK
Ez a mező tartalmazza egy byte 03AH, vastagbél kódolt hexadecimális ASCII karakter ( ':').

RECLEN
A mező 03030H kódoló hexadecimális ASCII karaktereket „00”. Mivel ez a rekord nem tartalmaz adatot INFO / DATA, akkor a hossza nulla.

LOAD OFFSET
Ez a mező tartalmazza 030303030H, kódolása „0000” hexadecimális ASCII karaktereket, mivel ezen a területen nem használják a felvételt.

RECTYP
Ez a mező tartalmazza 03031H kódoló hexadecimális ASCII jeleket „01”, amely meghatározza a típusú rögzítési End of File Record.

CHKSUM
Ez a mező tartalmazza az ellenőrző RECLEN mezők, LOAD OFFSET és RECTYP. Mivel az összes statikus mágneses tér (a tartalom mindig), az ellenőrző is számítani statikusan, és értéke 04646H hexadecimális kódolása ASCII karaktereket az „FF”.

[Algoritmus ellenőrző összeg]

Byte checksum string CHKSUM HEX-fájl van meghatározva, hogy az összeg az összes bájt hasznos karakterlánc és a legtöbb ellenőrző öntsük túlfolyó nulla. Ugyanakkor nem fejlesszék magukat ASCII karaktereket, és csak azokat az adatokat, amelyek az általuk képviselt. Egyszerűsített ellenőrző algoritmust pszeudokódokra rekord Adat Rekord:

Ahhoz, hogy teljesen világos, elemezzük egy egyszerű példát. Itt egy tipikus sora AVR mikrovezérlő firmware HEX-fájlt (az egyszerűség kedvéért mezőket különböző színekben):

10 3800 00 5CC000008FC0000073C0000071C00000 E9

Tehát ellenőrző CHKSUM kapnánk, ha hozzá (elutasító átutalás) adatforgalom RECLEN mező (0x10), az utolsó bájt a mező DATA [RECLEN-1] (0x00), majd vonjuk ki a nullától a kapott összeg (szintén elutasította a transzfer) :

0xE9 = 0 - (0x10 + 0x38 + 0x00 + 0x00 + 0x5C + 0xC0 + 0x00 + 0x00 + 0x8F + 0xC0 + 0x00 + 0x00 + 0x73 + 0xC0 + 0x00 + 0x00 + 0x71 + 0xC0 + 0x00 + 0x00)

Ha összeadjuk a bájtok RECLEN a CHKSUM befogadó (elutasító transzfer), megkapjuk a nulla:




Kapcsolódó cikkek