hex 檔案詳解 stm32

2021-06-18 22:09:56 字數 4058 閱讀 6047

我們先來詳細分析「方法一」的操作:

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...