MDK-keil中.map文件解读

在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息:
Program Size: Code=6320  RO-data=4864  RW-data=44  ZI-data=1636  
代表的意思:

Code :是程序中代码所占字节大小
RO-data :程序中所定义的指令和常量大小 (个人理解 :Read Only)
RW-data :程序中已初始化的变量大小 (个人理解”:Read/Write)
ZI-Data :程序中未初始化的变量大小 (个人理解 :Zero Initialize)


ROM(Flash) size = Code+RO-data+RW-data;

RAM size = RW-data+ZI-data

可以通过.map查看占用的flash和ram大小。

 
  
.map文件结构:
第一部分   Section Cross Reference  文件引用关系分析

主要是各个源文件生成的模块之间相互引用的关系

第二部分Removing Unused input sections from the image.

就是将库中没有用到的函数从可执行映像中删除掉,减小程序的体积。

第三部分 Image Symbol Table 映像中的所有符号组成的表

Local Symbol 局部符号 既有各模块的静态函数也有公开函数,没搞明白,有懂的兄台指点一二。

Global Symbol 全局符号 各个文件模块中的全局变量、公开函数。

第四部分 Memory Map of the imag 内存映射
  Execution Region ER_IROM1 (Base: 0x08000000, Size: 0x00046398, Max: 0x00080000, ABSOLUTE) 这一段指的是FLASH,size很明显是已用FLASH大小,包括Code + RO_data。下面列的就是每个目标文件所占FLASH的明细了。
  Execution Region RW_IRAM1 (Base: 0x20000000, Size: 0x00008eb0, Max: 0x00010000, ABSOLUTE, COMPRESSED[0x00000350])这一段指的是片内SRAM,size就是RW_data + ZI_data所占用的片内SRAM的大小,则主堆栈指针MSP = 0x20000000 + 0x8eb0,程序开始运行时MSP就从这个地址开始为局部变量分配地址.
  Execution Region ER$$.ARM.__AT_0x680830D0 (Base: 0x680830d0, Size: 0x00001024, Max: 0x00001024, ABSOLUTE, UNINIT)因为我为file结构变量定的地址是片外SRAM,所以map文件里也将片外SRAM的一些信息包括进来了,不过只有这个file结构体变量的大小哦0x1024

第五部分 Image component sizes 各目标文件的code \ ro \rw \zi的大小
显示列出工程中所有用的.c文件所生成的.o目标文件中各成分大小,然后是工程所添加的库文件所占的各成分大小。




你可能感兴趣的:(stm32编程技巧)