相信有较大项目开发经验的朋友都曾遇到内存溢出的问题,那么大家都是如何分析这类问题的呢?大家遇到HardFault_Handler 有对map分析过吗?
首先讲述一下关于map在MDK-ARM中的配置。其实,在MDK-ARM中,我们可以根据自己的情况(不同配置),在map文件中输出对应(我们需要)的内容。默认情况下,输出所有信息。
Project -> Options for Target -> Listing:会看到如下配置界面:
看到上图,相信都应该明白map文件大概有哪些内容了吧?
map文件里面内容大致分为五大类(按照map文件分类的顺序):
1.Section Cross References:模块、段(入口)交叉引用;
2.Removing Unused input sections from the image:移除未使用的模块;
3.Image Symbol Table:映射符号表;
4.Memory Map of the image:内存(映射)分布;
5.Image component sizes:存储组成大小。
下面章节就针对MDK-ARM详细讲述一下map文件里面的几大内容。
Ⅰ、Section Cross References:模块、段(入口)交叉引用
配置中需勾选上:Cross Reference
Section Cross References:模块、段(入口)交叉引用,指的是各个源文件生成的模块、段(定义的入口)之间相互引用的关系。
比如:
main.o(i.System_Initializes) refers to bsp.o(i.BSP_Initializes) for BSP_Initializes
意思是:
main模块(main.o)中的System_Initializes函数(i.System_Initializes),引用(或者说调用)了bsp模块(bsp.o)中的BSP_Initializes函数。
提示:
main.o是main.c源文件生成的目标文件模块;
I.System_Initializes是System_Initializes函数的入口。
Ⅱ、Removing Unused input sections from the image:移除未使用的模块