天天看點

STM32 Keil生成的map檔案分析

一、map檔案生成設定:

STM32 Keil生成的map檔案分析

選項說明表:

選項 釋義 簡要說明
Memory Map 記憶體映射 記憶體映射分布資訊
Callgraph 圖像映射 函數調用的堆棧使用以及子函數調用資訊
Symbols 映射符号表 子產品.o檔案對應映射位址
Cross Reference 交叉引用關系 子產品之間互相引用的關系
Size Info 組成大小資訊

Object Name、Library Member Name、Library Name生成的.o檔案占用的

Code、RO Data、RW Data、ZI Data、Debug詳細空間資訊

Totals Info 統計資訊

1、Object Totals、Library Totals 以及兩者之和

2、Total RO Size 、Total RW Size 、Total ROM Size

3、ELF檔案的大小和存放在ROM裡面占用的大小

Unuaed Sections Info 未調用子產品資訊 編譯了源檔案但未使用的子產品
Veneers Info 裝飾資訊

二、map檔案中的基礎概念

section 描述映像檔案的代碼和資料塊
Thumb Code 指令集代碼
RO Read-Only的縮寫,包括RO-data(隻讀資料域)和Code(代碼域)
RW Read-Write的縮寫,主要是RW-data,Rw-data由程式初始化初始值。
ZI Zero-initialized的縮寫,主要是ZI-data,由程式設計器初始化為0。
.constdata 常量資料段。RO Data,例如const關鍵字定義的變量
.text 即Code
.data 即ZI-data,初始化為“0 值”的可讀寫資料域或者未初始化的變量
.bss 即RW-data,初始化為“非 0 值”的可讀寫資料

三、map檔案組成分析

1、map檔案組成表:

組成子產品名稱 釋義 簡要說明 對應勾選
1 Section Cross References 子產品、段的交叉引用關系 各個源檔案生成的子產品之間互相引用的關系 Cross Reference
2 Removing Unused input sections from the image 移除未使用的子產品 移除編譯了但未使用的子產品 Unuaed Sections Info
3 Image Symbol Table 映射符号表 各個子產品所存儲的對應位址 Symbols
4 Memory Map of the image 映像的記憶體分布

映像檔案可以分為加載域(Load Region)和

運作域(Execution Region)

Memory Map
5 Image component sizes 映像存儲組成大小 Code、RO Data、RW Data、ZI Data、Debug等資料組成 Size Info

2、組成詳細分析

(1)Section Cross References

各個源檔案 .c 生成的 .o 子產品之間互相引用的關系。

STM32 Keil生成的map檔案分析

如圖,main 子產品調用了 delay 子產品的 delay_init 函數。

(2)Removing Unused input sections from the image

移除編譯了但未使用的子產品。

STM32 Keil生成的map檔案分析

(3)Image Symbol Table

映射符号表。

Symbol Name Value Ov Type Size Object(Section)
符号名稱 存儲對應的位址 符号對應的類型 存儲大小 子產品(源檔案)名

1> Local Symbols 用static聲明的函數和變量位址和大小 

STM32 Keil生成的map檔案分析

2> Global Symbols 全局變量和函數的位址和大小

STM32 Keil生成的map檔案分析

(4)Memory Map of the image

映像的記憶體分布

STM32 Keil生成的map檔案分析

1> 程式ROM加載空間:

Load Region LR_IROM1 (Base: 0x08000000, Size: 0x0000135c, Max: 0x00040000, ABSOLUTE)

2> 程式ROM執行空間:

Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00001328, Max: 0x00040000, ABSOLUTE)

執行空間的 ROM 比較小的原因就是因為部分 RW-data 類型的變量被拷貝到 RAM 空間了。

3> 後面的為位址分布清單

Exec Addr Load Addr Size Type Attr Section Name Objecj
運作域位址 加載域位址 存儲大小 類型 權限 入口分類名 目标
STM32 Keil生成的map檔案分析

(5)Image component sizes

映像存儲組成大小。詳細釋義參考:https://blog.csdn.net/p1279030826/article/details/103180034

STM32 Keil生成的map檔案分析
STM32 Keil生成的map檔案分析

Grand Totals:映像的真實大小。

ELF Image Totals:ELF可執行連結格式映像檔案大小。

ROM Totals:包含映像所需的 ROM的最小大小。不包括ZI資料和存儲在ROM 中的調試資訊。

繼續閱讀