在單片機編譯中,我們經常使用hex文件進行燒錄,那么hex文件到底是一個怎樣的文件呢?我們簡單的介紹一下:
先上圖:這是我用Notepad++ 直接打開的一個32bit的單片機編譯器編譯的一個hex文件的部分,

ASCII顯示

十六進制顯示
不難發(fā)現(xiàn):HEX格式文件以行為單位,每行由“:”(16進制為:0x3a)開始,以回車鍵結束(16進制為:0x0d,0x0a)。行內的數(shù)據(jù)都是由兩個字符表示一個16進制字節(jié),比如”08”就表示數(shù)0x08;”0a”,就表示0x0a。對于16位的地址,則高位在前低位在后,比如地址0x010a,在HEX格式文件中就表示為字符串”010a”。
我們把每一行稱之為一個Record。通常一個Record的格式如下:

- RECORD MARK (第1個字符)
為1個byte,為ASCII的“:”,十六進制為“0x3A”。
如:


- LOAD RECLEN (“:” 后的2個字符)
1個byte,表示本行包含的數(shù)據(jù)的長度。如:


0x08 :表示本行有8byte的數(shù)據(jù)。
- OFFSET(LOAD RECLEN后的4個字符)
2個byte,表示數(shù)據(jù)存儲的起始地址,如:


這里表示從0x0000地址開始存儲8個數(shù)據(jù),其中高位地址在前,低位地址在后。
- RECTYP(OFFSET后2個字符)
1個byte,表示數(shù)據(jù)的類型。該類型總共有以下幾種:
00 ----數(shù)據(jù)記錄
01 ----文件結束記錄
02 ----擴展段地址記錄
04 ----擴展線性地址記錄
如:


這里就是0x00即為數(shù)據(jù)記錄。
- INFO or DATA(RECTYP后的4個字符)
2個byte,表示本行包含的數(shù)據(jù)。如:


該處有16個字符,每2個字符表示一個byte,故此行有8個byte數(shù)據(jù),這和前面的LOAD RECLEN所定義的數(shù)據(jù)長度是統(tǒng)一的。
- CHKSUM(INFO or DATA后的2個字符)
1個byte,為校驗碼。如:


校驗和的算法為:計算0x8D前所有16進制碼的累加和(不計進位),檢驗和 = 0x100 - 累加和
即:checksum = 0x100 - (0x08+0x01+0x5A+0x10) = 0x8D。
每個HEX格式的最后一行都是固定為:(hex文件的末尾一行)
:00000001FF
01表示文件結束記錄,F(xiàn)F為校驗。