我前面曾經介紹了Intel 32 bit Hex,但並非全部的.hex文件都屬於這種格式。Keil輸出的hex文件則是另一個相似的格式Hex-80。與前者相似,紀錄的格式爲:
:LLAAAARRDDDD………DDDDCC
LL: Length field-長度段:數據段(D)的字節數
AAAA: Address field-地址段:數據段第一個字節的地址
RR: Record type-紀錄類型,00表明數據,01表明紀錄結束
DD..: Data field-數據段
CC: CheckSum field-校驗和:
計算方法是將本條記錄冒號開始的全部對字母<不包括本效驗字和冒號>所表示的十六進制數字<一對字母表示一個十六進制數,這樣的一個十六進制數爲一個字節>都加起來而後模除256獲得的餘數最後求出餘數的補碼便是本效驗字節cc. 例子::011B50002272 LL = 0x01 AAAA = 0x1B50 RR=0x00 DD=0x22 CHECK SUM = ~((0x01+0x1B+0x50+0x22)&0xFF)+1 = 0x72 與Intel 32不一樣,因爲Hex-80用於64K地址範圍之內的系統,因此沒有基址設定的指令。若是在Keil-51中,用跨BANK的方式超過了64K,編譯器會產生多個HXX文件來標識BANK。如: test.h00 test.h01 test.h02 分別在每一個bank的視角來產生64K代碼空間。對於Common Bank因爲其在每一個Bank的視角中都存在,因此在幾個文件中都有一樣的存在,這點要求編程人員注意。 還有,貌似Keil產生的Hex-80文件地址並不連續~天曉得Keil爲何不規整一下。