我們先來詳細分析「方法一」的操作:
2.編譯完程式後,在工程目錄的output資料夾中找到編譯後生產的.hex檔案;
用 notepad++ 或者 ultraedit 開啟 程式 的.hex檔案
hex檔案格式:
(1)以行為單位,每行以冒號開頭,內容全部為16進製製碼(以ascii碼形式顯示)
(2)在hex檔案裡面,每一行代表乙個記錄。記錄的基本格式為:
冒號本行資料長度
本行資料起始位址
資料型別
資料校驗碼
1 byte
2 bytes
1 byte
n byte
1 byte
第乙個位元組表示本行資料的長度; 第
二、三位元組表示本行資料的起始位址;
第四位元組表示資料型別,資料型別有:0x00、0x01、0x02、0x03、0x04、0x05。
'00' data rrecord:用來記錄資料,hex檔案的大部分記錄都是資料記錄
'01' end of file record:用來標識檔案結束,放在檔案的最後,標識hex檔案的結尾
'02' extended segment address record:用來標識擴充套件段位址的記錄
'03' start segment address record:開始段位址記錄
'04' extended linear address record:用來標識擴充套件線性位址的記錄
'05' start linear address record:開始線性位址記錄
然後是資料,最後乙個位元組為校驗和。
校驗和的演算法為:計算校驗和
前所有16進製製碼的累加和(不計進製),檢驗和= 0x100 - 累加和
開啟.hex內容如下:(中間部分資料略去)
[plain]view plain
copy
:020000040800f2
:10000000b80b00207d250008850300088703000841
:100010009b0300089f030008a303000800000000e2
:10002000000000000000000000000000a70300081e
:10003000a903000800000000ab030008ad0300089e
。 。
。 :102b40000400000000000000000000000000000081
:102b50000000000000000000000000000000000075
:102b6000010203040102030406070809020406081f
:102b700000366e01000000000000000001020304a6
:042b80000607080933
:0400000508000121cd
:00000001ff
先分析第一條語句---- 「:02 0000 04 0800 f2」
冒號本行資料長度
本行資料起始位址(偏移位址)
資料型別
資料校驗碼
1 byte
2 bytes
1 byte
n byte
1 byte
[plain]view plain
copy
[plain]view plain
copy
:020000
040800
f2在上面的
資料型別後2種記錄(04,05)都是用來提供位址資訊的
。每次碰到這
2個記錄的時候,都可以根據記錄計算出乙個「基
」位址。對於後面的資料記錄,計算位址的時候,都是以這些「基
」 第1
條記錄的長度為02,
load offset
為0000
,rectype為04
,說明該記錄為擴充套件段位址記錄。資料為
0800
,校驗和為
f2。從這個記錄的長度和資料,我們可以計算出乙個基位址,這個位址為
(0x0800 << 16) = 0x0800 0000
,後面的資料記錄都以這個位址為基位址。
第二條語句----「 :10000000b80b00207d250008850300088703000841」冒號
本行資料長度
本行資料起始位址(偏移位址)
資料型別
資料校驗碼
1 byte
2 bytes
1 byte
n byte
1 byte
[plain]view plain
copy
[plain]view plain
copy
:100000
00b80b00207d250008850300088703000841
第2條記錄的長度為
10(0x10=16位元組)
,load offset
為0000
,rectype
為00('00' data rrecord
:用來記錄資料,
hex檔案的大部分記錄都是資料記錄)
,資料為b80b00207d2500088503000887030008
第3條語句----「:0400000508000121cd」
冒號
本行資料長度
本行資料起始位址(偏移位址)
資料型別
資料校驗碼
1 byte
2 bytes
1 byte
n byte
1 byte
[plain]view plain
copy
[plain]view plain
copy
:040000
0508000121
cd記錄的長度為04,
load offset
為0000
,rectype
為
eip是32位機的
指令暫存器, ip是指令暫存器,存放當前指令的下一條指令的位址。cpu該執行哪條指令就是通過ip來指示的
上圖參考hex資料文件:或
第4條語句---「:00000001ff」 (每乙個.hex檔案的最後一行都是固定為這個內容) 冒號
本行資料長度
本行資料起始位址(偏移位址)
資料型別
資料校驗碼
1 byte
2 bytes
1 byte
n byte
1 byte
[plain]view plain
copy
:000000
01ff
(每乙個.hex檔案的最後一行都是固定為這個內容)
記錄的長度為00,
load offset
為0000
,rectype
為01
(01' end of file record:
用來標識檔案結束,放在檔案的最後,標識
hex檔案的結尾)
stm32啟動檔案ld詳解
說的直白點就是以下區別,在選擇啟動檔案的時候有選擇性區別!startup stm32f10x cl.s 互聯型的stm32f105xx,stm32f107xx startup stm32f10x hd.s 大容量的stm32f101xx,stm32f102xx,stm32f103xx startup...
STM32 hex檔案格式
hex 是 intel 公司制定的一種使用 ascii 文字記錄機器碼或常量資料的檔案格式,它可以燒錄到mcu中,被mcu執行的一種檔案格式。乙個hex檔案由多條記錄組成,而每條記錄由5個部分組成,格式如下 aabbbbcc dd.ee 用記事本開啟hex檔案如下 020000040801f1 10...
STM32 啟動檔案
先來看看啟動 中的偽操作和偽指令 equ 用於定義常量,相當於c中的巨集定義 如stack size equ 0x00000400 define stack size 0x00000400 align 位元組對齊方式 align 3 export 相當於宣告了乙個全域性變數 export vecto...