stm32单片机基础知识总结(六)

大家好!这篇是分享stm32单片机基础知识的第6篇。主要记录基于keil+stm32 生成的map文件的简单介绍。这篇文章参考了大量网上的资料,结合我个人的理解,对这块知识进行了一个梳理。介绍的不是特别具体,难免也存在纰漏之处。如有不妥之处,还请后台留言,进行指正。

以下是今天分享内容的概要

一、什么是map文件

二、map文件的内容介绍

三、map文件的用处

四、如何生成map文件

五、如何在keil5打开map文件

一、什么是map文件

map文件是通过编译器编译之后,集程序、数据及IO空间的一种映射文件。

二、map文件的内容介绍

map文件内容分类

从上面输出配置可以看得出来map文件大概包含了哪些信息。map文件将其分为如下五大类:

1、节区的跨文件引用(Section Cross References)

这部分主要是不同文件中函数的调用关系。

举下图的第一句要表达的意思是,stm32f4xx_adc.c 中的函数ADC_DeInit 调用了stm32f4xx_rcc.c中的函数RCC_APB2PeriphResetCmd;

2、删除无用节区(Removing Unused input ps from the image)

这部分列出了在链接过程它发现工程中未被引用的节区,这些未被引用的节区将会被删除(指不加入到*.axf 文件,不是指在*.o 文件删除),这样可以防止这些无用数据占用程序空间。

3、映射符号表(Image Symbol Table (Local Symbols Global Symbols)

Image Symbol Table:映射符号表,这个表列出了被引用的各个符号在存储器中的具体地址、占据的空间大小等信息。

Symbols分为两大类

1.Local Symbols局部

2.Global Symbols全局

内容要点

1.Symbol Name:符号名称

2.Value:存储对应的地址;

大家会发现有0x0800xxxx、0x2000xxxx这样的地址。

0x0800xxxx指存储在FLASH里面的代码、变量等。

0x2000xxxx指存储在内存RAM中的变量Data等。

3.Ov Type:符号对应的类型

符号类型大概有几种:Number、Section、Thumb Code、Data等;

细心的朋友会发现:全局、静态变量等位于0x2000xxxx的内存RAM中。

4.Size:存储大小

这个容易理解,我们怀疑内存溢出,可以查看代码存储大小来分析。

5.Object(Section):段目标

这里一般指所在模块(所在源文件)。

如下图所示:

4、存储器映像索引(Memory Map of the image)

映像文件可以分为加载域(Load Region)和运行域(Execution Region) 。

加载域就是程序在 Flash 中的实际存储,而运行域是芯片上电后的运行状态。下图中标①为加载域,标②为运行域。

5、映像组件大小(Image component sizes)

这部分包含了各个使用到的*.o 文件的空间汇总信息、整个工程的空间汇总信息以及占用不同类型存储器的空间汇总信息,它们分类描述了具体占据的 Code、 RO-data、 RW-data及 ZI-data 的大小,并根据这些大小统计出占据的 ROM 总空间。

Code:指代码的大小;Ro-data:指除了内联数据(inline data)之外的常量数据;RW-data:指可读写(RW)、已初始化的变量数据;ZI-data:指未初始化(ZI)的变量数据;

提醒:A.Code、Ro-data:位于FLASH中;B.RW-data、ZI-data:位于RAM中;C.RW-data已初始化的数据会存储在Flash中,上电会从FLASH搬移至RAM。

关系如下:RO Size = Code + RO DataRW Size = RW Data + ZI DataROM Size = Code + RO Data + RW Data

三、map文件的用处

在遇到内存越界,或溢出的情况,可以分析map文件,来查找问题。通过map文件可以知道函数大小,入口地址等一些重要信息。

四、如何生成map文件

上面的红色方框中可以对各个输出项打勾,打勾的即可输出相应的内容。其要表达的含义如下所示:

Memory Map:内存映射Callgraph:图像映射Symbols:符号Cross Reference:交叉引用Size Info:大小信息Totals Info:统计信息Unused Section Info:未调用模块信息Veneers Info:装饰信息

五、如何在keil5打开map文件

可以右击“Target”,在弹出菜单中点击 Open Map  File。也可以直接双击Target。

随后就会打开Map文件,如下图所示:

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 2
收藏 3
关注 44
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧