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目標文件中各成分大小,然後是工程所添加的庫文件所佔的各成分大小。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章