STM32H7的FLASH,RAM和棧使用情況(map和htm文件)
本章為大家介紹編譯器生成的map和htm文件進(jìn)行解析,通過這兩個(gè)文件可以讓大家對(duì)工程代碼的認(rèn)識(shí)程度提升一個(gè)檔次。
MAP文件分析
通過map文件,可以方便的查看工程ROM/FLASH和RAM的占用情況,包括單個(gè)源文件,甚至具體到每個(gè)函數(shù)的rom大小都給出了,通過這些信息可以很好的進(jìn)行代碼優(yōu)化。MAP文件的內(nèi)容可分為如下幾部分:
-
Section Cross References
-
Removing Unused input sections from the image
-
Image Symbol Table (Local Symbols Global Symbols)
-
Memory Map of the image
-
Image component sizes
1 MDK配置
要生成MAP文件,MDK中如下選項(xiàng)要選上:
2 MAP文件相關(guān)概念
認(rèn)識(shí)MAP文件前先熟悉如下概念:
-
段(section) :描述映像文件的代碼和數(shù)據(jù)塊。
-
RO:Read-Only的縮寫,包括RO-data(只讀數(shù)據(jù))和RO-code(代碼)。
-
RW:Read-Write的縮寫,主要是RW-data,RW-data由程序初始化初始值。
-
ZI: Zero-initialized的縮寫,主要是ZI-data,由編譯器初始化為0。
-
.text:與RO-code同義。
-
.constdata:與RO-data同義。
-
.bss:與ZI-data同義。
-
.data:與RW-data同義。
3 Section Cross References
這部分主要是不同文件中函數(shù)的調(diào)用關(guān)系(部分截圖)
4 Removing Unused input sections from the image
這部分主要是被刪除的冗余函數(shù),也就是添加到工程里面,但是沒有調(diào)用到的,下面是部分被刪除冗余函數(shù)的截圖效果:
5 Image Symbol Table
Image Symbol Table主要分為兩類,分別是Local Symbols和Global Symbols。
-
Local Symbols
-
Global Symbols
6 Memory Map of the image
映像文件可以分為加載域(Load Region)和運(yùn)行域(Execution Region):加載域反映了ARM可執(zhí)行映像文件的各個(gè)段存放在存儲(chǔ)器中的位置關(guān)系。下面是部分截圖,另外映像中的入口點(diǎn)就是程序開始執(zhí)行的位置。
7 Image component sizes
Image component sizes映像組件大小比較重要,比如下面內(nèi)容代表的含義:
-
Code (inc. Data) :顯示代碼占用了多少字節(jié)。在此映像中,有19442字節(jié)的代碼, 其中包括1832字節(jié)的內(nèi)聯(lián)數(shù)據(jù) (inc. data),例如文字池和短字符串。
-
RO Data :顯示只讀數(shù)據(jù)占用了多少字節(jié)(比如const char buf[] = "123456")。這是除 Code (inc. data) 列中包括的內(nèi)聯(lián)數(shù)據(jù)之外的數(shù)據(jù)。
-
RW Data :顯示讀寫數(shù)據(jù)占用了多少字節(jié)。
-
ZI Data :顯示零初始化的數(shù)據(jù)占用了多少字節(jié)。
-
Debug :顯示調(diào)試數(shù)據(jù)占用了多少字節(jié),例如,調(diào)試輸入節(jié)以及符號(hào)和字符串。
-
Object Totals :顯示鏈接到一起以生成映像的對(duì)象占用了多少字節(jié)。
-
(incl. Generated):鏈接器會(huì)生成的映像內(nèi)容,例如,交互操作中間代碼。如果 Object Totals 行包含此類型的數(shù)據(jù),則會(huì)顯示在該行中。本例中共有 1016 字節(jié)的 RO 數(shù)據(jù),其中32字節(jié)是鏈接器生成的 RO 數(shù)據(jù)。
-
(incl. Padding) :鏈接器根據(jù)需要插入填充,以強(qiáng)制字節(jié)對(duì)齊。
-
Grand Totals:顯示映像的真實(shí)大小。
-
ELF Image Totals:ELF(Executable and Linking Format)可執(zhí)行鏈接格式映像文件大小。
-
ROM Totals:顯示包含映像所需的 ROM的最小大小。這不包括 ZI數(shù)據(jù)和存儲(chǔ)在ROM 中的調(diào)試信息。
HTM文件分析
MDK將工程全編譯,且沒有錯(cuò)誤后,就會(huì)生成此文件。以開發(fā)板配套例子為例,htm文件位于路徑:\Project\MDK-ARM(uV5)\Objects。
總結(jié)
本章節(jié)的知識(shí)點(diǎn)比較重要,務(wù)必要熟練掌握。平時(shí)開發(fā)工程項(xiàng)目時(shí),可以多關(guān)注map文件和htm文件。