輸出map配置
首先講述一下關(guān)于map在MDK-ARM中的配置。其實(shí),在MDK-ARM中,我們可以根據(jù)自己的情況(不同配置),在map文件中輸出對(duì)應(yīng)(我們需要)的內(nèi)容。默認(rèn)情況下,輸出所有信息。
Project -> Options for Target -> Listing:會(huì)看到如下配置界面:
看到上圖,相信都應(yīng)該明白map文件大概有哪些內(nèi)容了吧?
map文件里面內(nèi)容大致分為五大類(按照map文件分類的順序):
1.Section Cross References:模塊、段(入口)交叉引用;
2.Removing Unused input sections from the image:移除未使用的模塊;
3.Image Symbol Table:映射符號(hào)表;
4.Memory Map of the image:內(nèi)存(映射)分布;
5.Image component sizes:存儲(chǔ)組成大小。
下面章節(jié)就針對(duì)MDK-ARM詳細(xì)講述一下map文件里面的幾大內(nèi)容(提示:部分內(nèi)容翻譯可能不是很準(zhǔn)確)。
Ⅰ
Section Cross References:模塊、段(入口)交叉引用
配置中需勾選上:Cross Reference
Section Cross References:模塊、段(入口)交叉引用,指的是各個(gè)源文件生成的模塊、段(定義的入口)之間相互引用的關(guān)系。
比如:
main.o(i.System_Initializes) refers to bsp.o(i.BSP_Initializes) for BSP_Initializes
意思是:
main模塊(main.o)中的System_Initializes函數(shù)(i.System_Initializes),引用(或者說(shuō)調(diào)用)了bsp模塊(bsp.o)中的BSP_Initializes函數(shù)。
提示:
main.o是main.c源文件生成的目標(biāo)文件模塊;
i.System_Initializes是System_Initializes函數(shù)的入口。
Ⅱ
Removing Unused input sections from the image:移除未使用的模塊
配置中需勾選上:Unuaed Sections Info
這一選項(xiàng)很好理解,就是我們工程代碼中,沒(méi)有被調(diào)用的模塊。
最后還有一個(gè)統(tǒng)計(jì)信息:
52 unused section(s) (total 2356 bytes) removed from the image.
1.總共有52段沒(méi)有被調(diào)用;
2.沒(méi)有被調(diào)用的大小為2356 字節(jié);
Ⅲ
Image Symbol Table:映射符號(hào)表
配置中需勾選上:Symbols
Image Symbol Table:映射符號(hào)表,也就是各個(gè)段所存儲(chǔ)對(duì)應(yīng)地址的表(這一項(xiàng)比較重要)。
Symbols分為兩大類
1.Local Symbols局部
2.Global Symbols全局
內(nèi)容要點(diǎn)
1.Symbol Name:符號(hào)名稱
2.Value:存儲(chǔ)對(duì)應(yīng)的地址;
大家會(huì)發(fā)現(xiàn)有0x0800xxxx、0x2000xxxx這樣的地址。
0x0800xxxx指存儲(chǔ)在FLASH里面的代碼、變量等。
0x2000xxxx指存儲(chǔ)在內(nèi)存RAM中的變量Data等。
3.Ov Type:符號(hào)對(duì)應(yīng)的類型
符號(hào)類型大概有幾種:Number、Section、Thumb Code、Data等;
細(xì)心的朋友會(huì)發(fā)現(xiàn):全局、靜態(tài)變量等位于0x2000xxxx的內(nèi)存RAM中。
4.Size:存儲(chǔ)大小
這個(gè)容易理解,我們懷疑內(nèi)存溢出,可以查看代碼存儲(chǔ)大小來(lái)分析。
5.Object(Section):段目標(biāo)
這里一般指所在模塊(所在源文件)。
Ⅳ
Memory Map of the image:內(nèi)存(映射)分布
配置中需勾選上:Memory Map
Memory Map of the image:內(nèi)存(映射)分布,內(nèi)容相對(duì)較多,也是比較重要的一項(xiàng)。
Image Entry point : 0x08000131:指映射入口地址。
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x000004cc, Max: 0x00080000, ABSOLUTE):
指加載區(qū)域位于LR_IROM1開(kāi)始地址0x08000000,大小有0x000004cc,這塊區(qū)域最大為0x00080000.
執(zhí)行區(qū)域:
Execution Region ER_IROM1
Execution Region RW_IRAM1
這個(gè)區(qū)域,其實(shí)就是對(duì)應(yīng)我們目標(biāo)配置中的區(qū)域,如下如:
內(nèi)容要點(diǎn)
1.Base Addr:存儲(chǔ)地址
0x0800xxxxFLASH地址和0x2000xxxx內(nèi)存RAM地址。
2.Size:存儲(chǔ)大小
3.Type:類型
Data:數(shù)據(jù)類型
Code:代碼類型
Zero:未初始化變量類型
PAD:這個(gè)類型在map文件中放在這個(gè)位置,其實(shí)它不能算這里的類型。要翻譯的話,只能說(shuō)的“補(bǔ)充類型”。
ARM處理器是32位的,如果定義一個(gè)8位或者16位變量就會(huì)剩余一部分,這里就是指的“補(bǔ)充”的那部分,會(huì)發(fā)現(xiàn)后面的其他幾個(gè)選項(xiàng)都沒(méi)有對(duì)應(yīng)的值。
4.Attr:屬性
RO:存儲(chǔ)與ROM中的段
RW:存儲(chǔ)與RAM中的段
5.Section Name:段名
這里也可以說(shuō)為入口分類名,與第一章節(jié)“Section Cross References”指的模塊、段一樣。
大概包含:RESET、.ARM、 .text、 i、 .data、 .bss、 HEAP、 STACK等。
6.Object:目標(biāo)
Ⅴ
Image component sizes:存儲(chǔ)組成大小
配置中需勾選上:Size Info
Image component sizes:存儲(chǔ)組成大小,其實(shí)主要就是對(duì)模塊進(jìn)行匯總存儲(chǔ)大小信息。
這一章節(jié)內(nèi)容相信大家都能理解,我們編譯工程后,在編譯窗口一般會(huì)看到類似如下一段信息:
Program Size: Code=908 RO-data=320 RW-data=0 ZI-data=1024
Code:指代碼的大?。?/p>
Ro-data:指除了內(nèi)聯(lián)數(shù)據(jù)(inline data)之外的常量數(shù)據(jù);
RW-data:指可讀寫(xiě)(RW)、已初始化的變量數(shù)據(jù);
ZI-data:指未初始化(ZI)的變量數(shù)據(jù);
Code、Ro-data:位于FLASH中;
RW-data、ZI-data:位于RAM中;
提醒:RW-data已初始化的數(shù)據(jù)會(huì)存儲(chǔ)在Flash中,上電會(huì)從FLASH搬移至RAM中。
關(guān)系如下:
RO Size= Code + RO Data
RW Size= RW Data + ZI Data
ROM Size= Code + RO Data + RW Data
更多具體內(nèi)容可以參看文章:
Keil編譯存儲(chǔ)相關(guān)說(shuō)明及拓展
上面信息是比較全面的匯總,如果不想看那些模塊的詳細(xì),只看匯總統(tǒng)計(jì)的信息可以在配置中只勾選“Totals Info”,對(duì)比信息:
-
ARM
+關(guān)注
關(guān)注
135文章
9445瀏覽量
385524 -
MAP
+關(guān)注
關(guān)注
0文章
49瀏覽量
15716 -
MDK
+關(guān)注
關(guān)注
4文章
211瀏覽量
33252
發(fā)布評(píng)論請(qǐng)先 登錄
AT組件無(wú)法正確解析bin文件怎么解決?
飛凌嵌入式ElfBoard ELF 1板卡-uboot編譯system.map/uboot.map
美國(guó)Odyssey奧德賽電池充電注意事項(xiàng)全解析

S32G3有沒(méi)有辦法從.map文件確定SRAM使用情況?
十種主流電機(jī)拆解全解析:內(nèi)部結(jié)構(gòu)大揭秘!
從零開(kāi)始馴服Linux(一):ZYNQ-Linux啟動(dòng)文件構(gòu)建全解析
MAX15258DL2EVKIT解析:MAX15258評(píng)估套件特性 數(shù)據(jù)表 ODB文件

使用stm32cubeMX無(wú)法生成mdk工程文件?
【敏矽微ME32G070開(kāi)發(fā)板免費(fèi)體驗(yàn)】新建工程(MDK)
深度解析研華全棧式AI產(chǎn)品布局
FPD-link裕量分析程序(MAP)用戶指南

深入解析Tricore的Tasking鏈接文件

評(píng)論