说明:
本文原创作者『strongerHuang』
首发于微信公众号『嵌入式专栏』,同时也更新在我的个人网站:EmbeddedDevelop
标签:Keil、 MDK-ARM、 µVision
该教程基于MDK-ARM,大部分内容也适用于Keil其它3款(C51、 C251、 C166)产品。
一、写在前面
什么是map文件?
简单的说:map文件是通过编译器编译之后,集程序、数据及IO空间的一种映射文件。
很多技术牛逼的工程师在遇到内存越界,或溢出的情况,首先想到的就是分析map文件。通过map文件可以知道函数大小,入口地址等一些重要信息。
我们在Keil中最常见的就是在编译之后,编译窗口会显示类似如下一段关于程序和数据大小的信息:
Program Size: Code=1112 RO-data=320 RW-data=0 ZI-data=1632
这一段提示信息其实是汇总了程序和数据的信息,这些信息其实是单个模块汇总而成,在map文件里有详细列表。
二、关于Keil中的map文件
2.1 如何打开map文件
最直接,也是最简单的办法:双击工程目标,出现map文件(注意,双击的是工程目标,不要双击工程,或文件组)。如下图:
当然,可以找到map文件位置(Listings文件夹),用编辑器工具打开。
2.2 map文件输出内容配置
在之前文章《Keil系列教程05_工程目标选项配置(一)》中的Listing 列表章节有提到map文件。
map文件输出信息的配置位于:Project -> Options for Target -> Listing,如下图:
主要包含配置:
Memory Map:内存映射
Callgraph:图像映射
Symbols:符号
Cross Reference:交叉引用
Size Info:大小信息
Totals Info:统计信息