性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

stm32單片機(jī)基礎(chǔ)知識(shí)總結(jié)(六)

大家好!這篇是分享stm32單片機(jī)基礎(chǔ)知識(shí)的第6篇。主要記錄基于keil+stm32 生成的map文件的簡(jiǎn)單介紹。這篇文章參考了大量網(wǎng)上的資料,結(jié)合我個(gè)人的理解,對(duì)這塊知識(shí)進(jìn)行了一個(gè)梳理。介紹的不是特別具體,難免也存在紕漏之處。如有不妥之處,還請(qǐng)后臺(tái)留言,進(jìn)行指正。

以下是今天分享內(nèi)容的概要

一、什么是map文件

二、map文件的內(nèi)容介紹

三、map文件的用處

四、如何生成map文件

五、如何在keil5打開(kāi)map文件

一、什么是map文件

map文件是通過(guò)編譯器編譯之后,集程序、數(shù)據(jù)及IO空間的一種映射文件。

二、map文件的內(nèi)容介紹

map文件內(nèi)容分類

從上面輸出配置可以看得出來(lái)map文件大概包含了哪些信息。map文件將其分為如下五大類:

1、節(jié)區(qū)的跨文件引用(Section Cross References)

這部分主要是不同文件中函數(shù)的調(diào)用關(guān)系。

舉下圖的第一句要表達(dá)的意思是,stm32f4xx_adc.c 中的函數(shù)ADC_DeInit 調(diào)用了stm32f4xx_rcc.c中的函數(shù)RCC_APB2PeriphResetCmd;

2、刪除無(wú)用節(jié)區(qū)(Removing Unused input ps from the image)

這部分列出了在鏈接過(guò)程它發(fā)現(xiàn)工程中未被引用的節(jié)區(qū),這些未被引用的節(jié)區(qū)將會(huì)被刪除(指不加入到*.axf 文件,不是指在*.o 文件刪除),這樣可以防止這些無(wú)用數(shù)據(jù)占用程序空間。

3、映射符號(hào)表(Image Symbol Table (Local Symbols Global Symbols)

Image Symbol Table:映射符號(hào)表,這個(gè)表列出了被引用的各個(gè)符號(hào)在存儲(chǔ)器中的具體地址、占據(jù)的空間大小等信息。

Symbols分為兩大類

1.Local Symbols局部

2.Global Symbols全局

內(nèi)容要點(diǎn)

1.Symbol Name:符號(hào)名稱

2.Value:存儲(chǔ)對(duì)應(yīng)的地址;

大家會(huì)發(fā)現(xiàn)有0x0800xxxx、0x2000xxxx這樣的地址。

0x0800xxxx指存儲(chǔ)在FLASH里面的代碼、變量等。

0x2000xxxx指存儲(chǔ)在內(nèi)存RAM中的變量Data等。

3.Ov Type:符號(hào)對(duì)應(yīng)的類型

符號(hào)類型大概有幾種:Number、Section、Thumb Code、Data等;

細(xì)心的朋友會(huì)發(fā)現(xiàn):全局、靜態(tài)變量等位于0x2000xxxx的內(nèi)存RAM中。

4.Size:存儲(chǔ)大小

這個(gè)容易理解,我們懷疑內(nèi)存溢出,可以查看代碼存儲(chǔ)大小來(lái)分析。

5.Object(Section):段目標(biāo)

這里一般指所在模塊(所在源文件)。

如下圖所示:

4、存儲(chǔ)器映像索引(Memory Map of the image)

映像文件可以分為加載域(Load Region)和運(yùn)行域(Execution Region) 。

加載域就是程序在 Flash 中的實(shí)際存儲(chǔ),而運(yùn)行域是芯片上電后的運(yùn)行狀態(tài)。下圖中標(biāo)①為加載域,標(biāo)②為運(yùn)行域。

5、映像組件大小(Image component sizes)

這部分包含了各個(gè)使用到的*.o 文件的空間匯總信息、整個(gè)工程的空間匯總信息以及占用不同類型存儲(chǔ)器的空間匯總信息,它們分類描述了具體占據(jù)的 Code、 RO-data、 RW-data及 ZI-data 的大小,并根據(jù)這些大小統(tǒng)計(jì)出占據(jù)的 ROM 總空間。

Code:指代碼的大小;Ro-data:指除了內(nèi)聯(lián)數(shù)據(jù)(inline data)之外的常量數(shù)據(jù);RW-data:指可讀寫(xiě)(RW)、已初始化的變量數(shù)據(jù);ZI-data:指未初始化(ZI)的變量數(shù)據(jù);

提醒:A.Code、Ro-data:位于FLASH中;B.RW-data、ZI-data:位于RAM中;C.RW-data已初始化的數(shù)據(jù)會(huì)存儲(chǔ)在Flash中,上電會(huì)從FLASH搬移至RAM。

關(guān)系如下:RO Size = Code + RO DataRW Size = RW Data + ZI DataROM Size = Code + RO Data + RW Data

三、map文件的用處

在遇到內(nèi)存越界,或溢出的情況,可以分析map文件,來(lái)查找問(wèn)題。通過(guò)map文件可以知道函數(shù)大小,入口地址等一些重要信息。

四、如何生成map文件

上面的紅色方框中可以對(duì)各個(gè)輸出項(xiàng)打勾,打勾的即可輸出相應(yīng)的內(nèi)容。其要表達(dá)的含義如下所示:

Memory Map:內(nèi)存映射Callgraph:圖像映射Symbols:符號(hào)Cross Reference:交叉引用Size Info:大小信息Totals Info:統(tǒng)計(jì)信息Unused Section Info:未調(diào)用模塊信息Veneers Info:裝飾信息

五、如何在keil5打開(kāi)map文件

可以右擊“Target”,在彈出菜單中點(diǎn)擊 Open Map  File。也可以直接雙擊Target。

隨后就會(huì)打開(kāi)Map文件,如下圖所示:

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺(jué)得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 2
收藏 3
關(guān)注 30
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧