關於_map文件的全面解析

引用鏈接:https://www.strongerhuang.com/Keil/Keil系列教程12_map文件全面解析.html
這篇文章介紹的比較全面,摘錄部分我認爲比較重要的如下:

什麼是map文件?
簡單的說:map文件是通過編譯器編譯之後,集程序、數據及IO空間的一種映射文件。
很多技術牛逼的工程師在遇到內存越界,或溢出的情況,首先想到的就是分析map文件。通過map文件可以知道函數大小,入口地址等一些重要信息。

我們在Keil中最常見的就是在編譯之後,編譯窗口會顯示類似如下一段關於程序和數據大小的信息:
Program Size: Code=1112 RO-data=320 RW-data=0 ZI-data=1632

這一段提示信息其實是彙總了程序和數據的信息,這些信息其實是單個模塊彙總而成,在map文件裏有詳細列表。
在這裏插入圖片描述
keil 主要包含配置:
Memory Map:內存映射
Callgraph:圖像映射
Symbols:符號
Cross Reference:交叉引用
Size Info:大小信息
Totals Info:統計信息
Unused Section Info:未調用模塊信息
Veneers Info:裝飾信息

2.3 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:存儲組成大小

我們編譯工程後,在編譯窗口一般會看到類似如下一段信息:
Program Size: Code=1112 RO-data=320 RW-data=0 ZI-data=1632

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 Data
RW Size = RW Data + ZI Data
ROM Size = Code + RO Data + RW Data

發佈了31 篇原創文章 · 獲贊 18 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章