keil---arm公司收購的整合微控制器的編譯鏈結等一系列工具的開發環境,支援c和彙編程式設計。經常燒錄keil生成的hex檔案,不免想知道其資料組成,以下為使用keil 4結合網上和自身的使用,解讀一下。使用keil c51,即大端格式;請使用小端編譯的自行轉換;
keil hex檔案是由一行行符合intel hex檔案格式的文字所構成的ascii文字檔案。每一行包含乙個hex記錄,由對應機器語言碼和/或常量資料的十六進製制編碼數字組成,並且以回車符,即\r\n 0d0a結束,見下圖的例項說明。intel hex檔案通常用於傳輸存於rom或eprom中的程式和資料。每個記錄包含5個域按如下格式排列: :llaaaatt[dd...]cc
: 每個記錄都以冒號開頭
ll 資料長度域,代表記錄中資料位元組(dd)的數量;
tt 記錄型別的域:
1. 00 --- 資料記錄;
2. 01 --- 檔案結束記錄;intel hex檔案必須以檔案結束符eof記錄結束,這個記錄必須是: :00000001ff
3. 02 --- 擴充套件段位址記錄;hex86記錄,它包括4-19位資料位址段;總是包含兩個位元組資料;例如::020000021200ea;通過位址域與被移位的擴充套件段位址資料相加獲得資料記錄的絕對儲存器位址;例如:2462,1200 --- 00014462
4. 04 --- 擴充套件線性位址記錄;32位位址記錄或hex386記錄,資料位址的高16位;應該是資料存放的32位位址的高16位;通過與位址域與被移位的來自擴充套件線性位址記錄的位址資料相加,獲得資料記錄的絕對儲存器位址;例如:2462,1234 --- 12342462
dd 資料域,由許多資料位元組組成;
cc 校驗和域,這個記錄的校驗和;所有位元組和的低八位,對256取餘;例如hex檔案的第二行記錄:01000f0022ce
01 00 0f 00 22 相加,對低八位的去256的餘數,為ce.。
對於大端格式,即資料的高位儲存在低位址,低位儲存在高位址,如下例項:
0x12儲存在0x08位址,
0x34儲存在0x09位址;
以下是測試程式和相應彙編碼,全部由keil 4生成:
hex檔案資料:
:0c00030075081275093485080a85090b80
:01000f0022ce
:03000000020010eb
:0c001000787fe4f6d8fd75810b02000338
:00000001ff
hex檔案十六進製制資料:
把此hex燒錄到微控制器中,通過燒錄工具,得到機器碼如下:
hex檔案的解析 keil
在你做公升級的時候你會用到hex檔案的載入,所以對hex檔案的解析很重要。hex整個檔案以行為單位,每行以冒號開頭,內容全部為16進製製碼 以ascii碼形式顯示 格式為 0x3a 資料長度 1byte 資料位址 2byte 資料型別 1byte 資料 nbyte 校驗 1byte 0x0d 0x0...
KEIL生成BIN檔案
操作步驟 01 前提概要 keil中生成bin檔案,是執行fromelf.exe程式生成的 說明fromelf.exe 是命令列 cmd 中執行的程式,直接雙擊無法執行 fromelf.exe 路徑為keil安裝目錄下的 arm armcc bin 目錄中 02 在keil中新增命令,執行frome...
使用KEIL , 生成BIN檔案
我的電腦裡的路徑是 d keil v5 arm armcc bin fromelf.exe 我的示例工程裡的檔案目錄是 iot bootloader rtos ps 代表keil工程檔案所在目錄 fromelf.exe檔案路徑 檔名 bin o 生成bin檔案存放路徑 檔名 keil編譯生成的.ax...