首页 > 版块 > STM32 > 帖子正文

什么是Map文件,它有什么用?

黄忠 发布于 2021-11-11 14:07
收藏 0 回复 0 浏览 1215 原创

     大家好!我是张飞实战电子黄忠老师;前文章《不要再找啦,关于Cortex-Mx芯片的启动没有比这里更清楚啦》STM32单片机的启动流程以及main函数的执行做了一个详细的分析,今天我们MDK编译、链接后生成的map文件简单分析一下,加深对链接器、嵌入式系统可执行映像特点的了解。

什么是map文件?简单的说map文件是通过编译器编译之后,集众多信息为一身的一种映射文件。很多工程师在遇到内存越界溢出情况分析map文件。通过map文件可以知道函数大小,入口地址等一些重要信息。最直观的的在Keil编译之后,编译窗口会显示类似如下一段信息:Program Size这一段提示信息汇总了程序和数据的信息,这些信息是单个模块汇总而成,在map文件里有详细列表。

图片1.png 

1.Section Cross References,主要是各个源文件生成的模块之间相互引用的关系。

图片2.png
上面这句话,main.omain.c生成的目标文件模块,start.ostart.s生成的目标文件模块,上面这2个含义是:用户在start.o启动代码中调用了__main.o模块中的StartProgram函数,StartProgram又调用了同文件中Led_Init函数。
 
2.Removing Unused input sections from the image. 就是将库中没有用到的函数从可执行映像中删除掉,减小程序的体积。
3.Image Symbol Table

图片3.png
 

Local Symbols 是系统内部的局部标号以及用户的一些局部标号
图片4.png
Global Symbols此部分描述了系统以及外部标号的所属地址、所占空间大小、所属文件等信息。
图片5.png     

4. Memory Map of the image映像的内存分布图片6.png
1>.Image Entry point : 0x08000009,这个指的是复位程序RESET_Handler的地址。
2>.Load Region LR_1 (Base: 0x08000000, Size: 0x00000044, Max:0xFFFFFFFF, ABSOLUTE),是程序的加载映像地址和长度,0x00000044=Start.0文件的大小(0x0C) + main.oLed_Init函数的大小(0x3C) + main.oStartProgram函数的大小(0x08)
3>.Execution Region ER_RO (Base: 0x08000000, Size: 0x00000044, Max:0xFFFFFFFF, ABSOLUTE,指的是程序中的代码段和常量。
4>.Execution Region ER_RW(Base: 0x20000000, Size: 0x00000000, Max: 0xFFFFFFFF, ABSOLUTE) 指的是可读写的全局变量和静态变量区域,因为我们现在只是一个简单的测试程序,没有变量,所以这里Size大小为0

5>.Execution Region ER_ZI(Base: 0x20000000, Size: 0x00000000, Max: 0xFFFFFFFF, ABSOLUTE) 指的是程序中被初始化为零的变量,这里Size大小为0的原因同上。

6>6.Image component sizes 这是指各个模块的大小信息

图片7.png
Total RO  Size (Code + RO Data)                680.07kB)
Total RW  Size (RW Data + ZI Data)              68 (   0.00kB)
Total ROM Size (Code + RO Data + RW Data)      68 (  0.07kB)

图片8.png
由于我们测试程序总没有定义一些变量,只是简单的操作了3个寄存器,所以RW Data + Zi Data0,其余全是代码指令信息,共680x44)个字节,程序总大小为68/10241KB = 1024个字节), 约0.07Kb

至此我们已经解开了Map文件的神秘面纱,文件包含的信息全部分析完成,从文件中我们可以得出一些有用的信息,便于我们在分析调试代码的时候使用,当然Map配合链接文件(.sct)可能会看到直接的效果,后期有机会我们聊一聊链接文件,谢谢大家。




0 0
发表评论 侵权投诉
评论 (0)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表乌云踏雪网立场。

文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。