1. 程式人生 > >keil輸出memory window 資料HEX386檔案格式介紹

keil輸出memory window 資料HEX386檔案格式介紹

我前面曾經介紹了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為什麼不規整一下。

keil的memory視窗可以儲存資料,所儲存的資料檔案格式為HEX386,這個小工具可以將hex386轉換為bin檔案格式
具體方法:將所要轉換檔案拷貝到該工具目錄下,雙擊開啟hexToBin.exe,然後輸入hex386格式的檔名(無需副檔名)後回車,即可