(轉)深入剖析之通過IAR MAP文件查看目標文件內存分配


深入剖析之通過IAR MAP文件查看目標文件內存分配

http://blog.chinaaet.com/detail/27117.html 

    又是一年五四青年節,也不知道自己還會像現在意氣風發多少個青年節,也不清楚自己對技術的執着還會一如既往的堅持多久,總之既然現在依舊堅定不移的“前進”着(前段日子看到奧巴馬的競爭口號就是“前進”,說不定跟俺一個境界來,哈哈),未來不可預知,但可規划和爭取,把握好現在,莫要虛度光陰,我們年輕並不代表我們有浪費時間的理由~比較推崇特權的那句話,“技術源於積累,成功源於執着”,大家共勉之~

    哈哈,感慨發完了,該回歸正事了... ...不知道別的地兒方怎么樣,總之濟南今天天氣是格外的好,綠樹成蔭,草長鶯飛的,不寫點東西都覺着不舒坦了,我要是文人墨客的話估計早就開始吟詩作對了,不過既然俺是工科技術男,還是寫篇技術博客來的實際吧,嘿嘿~

    好了,不天氣預報了,呵呵,來說說正題吧。本篇算是自己的一篇經驗總結吧,這里給大家分享一下,同時也讓自己養成文檔總結的好習慣。為了具體化問題,我這里還是以IAR開發Kinetis為例深入介紹一下。其實map文件(內存映射文件)可能初手開發的時候甚少有去關注它的,甚至好些都不知道它是干嘛的,呵呵,只有一些有經驗的老手或者搞移植搞深入研究的才會去查看它,初手往往上來就是在線調試、查看內存(這個都很少用)、看寄存器、斷點(這個用的也少)等等,但是等你了解了map文件,再去完成上述調試的時候會讓你事半功倍,且有一種運籌帷幄的感覺都不誇張。哈哈,說的這么多,還是上圖介紹吧(俺還是喜歡圖文並茂的感覺,話說喬布斯以前在每次開蘋果新品展示會的時候,你看見的絕對大多數是圖片形式的演講稿,因為喬大爺深諳這個道理,估計這也是為什么iOS,Mac OS都是UI強大的原因吧):

    首先當然要生成map文件了,注意IAR的默認設置是不生成map文件的,我們需要手動設置一下,如下圖,然后點擊准備就緒之后編譯即可在$PROJ_DIR$\FLASH_256KB_PFLASH\List文件夾下找到:

    生成之后,我們在IAR環境下打開它(當然可以以記事本直接打開,這里為了更直觀),map文件主要由以下幾部分構成:

(1)文件頭中顯示鏈接器版本,輸出文件名,MAP 文件名以及鏈接器命令行等。 

(2)RUNTIME MODEL ATTRIBUTES 部份顯示 Endian 等屬性;

(3) PLACEMENT SUMMARY 部份顯示各sections 在存儲器中的分布; 

(4)INIT TABLE 部份顯示與初始化有關的section tables;

(5) MODULE SUMMARY 部份顯示所有被連接的文件信息,包括目標文件和庫文件等;
 
(6) ENTRY LIST 部份給出了所有函數的入口地址及其所在的目標文件。 
 
(7)文件尾中顯示了總的代碼和數據字節數( 想看下最后目標代碼占用多少Flash和多少RAM的可以從這里查到)。
 
    本篇就挑出我們在調試的時候常常會考慮到用到的幾個部分,當然有興趣的可以每個部分都可以看看,會讓你受益匪淺的,下面就分部分介紹下:
(1) PLACEMENT SUMMARY,該部分主要顯示目標代碼在芯片內部的存儲器映射地址,可能會有人疑問為什么會分配到這些地址的呢,其實這些地址分配都是在前文講的Linker文件(*.icf文件)里預定義好了,IAR根據所選目標芯片就按照該定義分配地址段,然后燒寫進Flash,具體段定義可以到大前篇博客icf文件說明詳細了解。
 
(2) ENTRY LIST,開發工程內所有函數的入口地址,個人覺着這部分很有用,通過該地址映射再結合調試的時候觀察內存空間可以方便整個工程執行情況,讓你了若指掌,而且也方便你解讀一個陌生程序的功能(例如參考別人的例程,網上的例程之類的),總之個人覺着這個部分用處很大,有心人可以在此處做很大文章。
 
(3)這是map文件末尾部分,最后給出了整個工程文件占用的資源情況,即芯片內部Flash和RAM的使用情況,便於你對工程開發規模上的掌握,最后給出工程編譯鏈接輸出信息。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM