一、map檔案生成設定:
選項說明表:
選項 | 釋義 | 簡要說明 |
Memory Map | 記憶體映射 | 記憶體映射分布資訊 |
Callgraph | 圖像映射 | 函數調用的堆棧使用以及子函數調用資訊 |
Symbols | 映射符号表 | 子產品.o檔案對應映射位址 |
Cross Reference | 交叉引用關系 | 子產品之間互相引用的關系 |
Size Info | 組成大小資訊 | Object Name、Library Member Name、Library Name生成的.o檔案占用的 Code、RO Data、RW Data、ZI Data、Debug詳細空間資訊 |
Totals Info | 統計資訊 | 1、Object Totals、Library Totals 以及兩者之和 2、Total RO Size 、Total RW Size 、Total ROM Size 3、ELF檔案的大小和存放在ROM裡面占用的大小 |
Unuaed Sections Info | 未調用子產品資訊 | 編譯了源檔案但未使用的子產品 |
Veneers Info | 裝飾資訊 |
二、map檔案中的基礎概念
section | 描述映像檔案的代碼和資料塊 |
Thumb Code | 指令集代碼 |
RO | Read-Only的縮寫,包括RO-data(隻讀資料域)和Code(代碼域) |
RW | Read-Write的縮寫,主要是RW-data,Rw-data由程式初始化初始值。 |
ZI | Zero-initialized的縮寫,主要是ZI-data,由程式設計器初始化為0。 |
.constdata | 常量資料段。RO Data,例如const關鍵字定義的變量 |
.text | 即Code |
.data | 即ZI-data,初始化為“0 值”的可讀寫資料域或者未初始化的變量 |
.bss | 即RW-data,初始化為“非 0 值”的可讀寫資料 |
三、map檔案組成分析
1、map檔案組成表:
組成子產品名稱 | 釋義 | 簡要說明 | 對應勾選 | |
1 | Section Cross References | 子產品、段的交叉引用關系 | 各個源檔案生成的子產品之間互相引用的關系 | Cross Reference |
2 | Removing Unused input sections from the image | 移除未使用的子產品 | 移除編譯了但未使用的子產品 | Unuaed Sections Info |
3 | Image Symbol Table | 映射符号表 | 各個子產品所存儲的對應位址 | Symbols |
4 | Memory Map of the image | 映像的記憶體分布 | 映像檔案可以分為加載域(Load Region)和 運作域(Execution Region) | Memory Map |
5 | Image component sizes | 映像存儲組成大小 | Code、RO Data、RW Data、ZI Data、Debug等資料組成 | Size Info |
2、組成詳細分析
(1)Section Cross References
各個源檔案 .c 生成的 .o 子產品之間互相引用的關系。
如圖,main 子產品調用了 delay 子產品的 delay_init 函數。
(2)Removing Unused input sections from the image
移除編譯了但未使用的子產品。
(3)Image Symbol Table
映射符号表。
Symbol Name | Value | Ov Type | Size | Object(Section) |
符号名稱 | 存儲對應的位址 | 符号對應的類型 | 存儲大小 | 子產品(源檔案)名 |
1> Local Symbols 用static聲明的函數和變量位址和大小
2> Global Symbols 全局變量和函數的位址和大小
(4)Memory Map of the image
映像的記憶體分布
1> 程式ROM加載空間:
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x0000135c, Max: 0x00040000, ABSOLUTE)
2> 程式ROM執行空間:
Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00001328, Max: 0x00040000, ABSOLUTE)
執行空間的 ROM 比較小的原因就是因為部分 RW-data 類型的變量被拷貝到 RAM 空間了。
3> 後面的為位址分布清單
Exec Addr Load Addr Size Type Attr Section Name Objecj 運作域位址 加載域位址 存儲大小 類型 權限 入口分類名 目标
(5)Image component sizes
映像存儲組成大小。詳細釋義參考:https://blog.csdn.net/p1279030826/article/details/103180034
Grand Totals:映像的真實大小。
ELF Image Totals:ELF可執行連結格式映像檔案大小。
ROM Totals:包含映像所需的 ROM的最小大小。不包括ZI資料和存儲在ROM 中的調試資訊。