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

嵌入式小知識(shí):燒錄文件是被如何存儲(chǔ)到MCU中的?


      單片機(jī)軟件都是以hex或者bin文件的形式燒錄到我們的MCU中進(jìn)行存儲(chǔ)的,那你知道這些燒錄的文件在MCU中是如何分布的嗎?

      舉一個(gè)簡(jiǎn)單的例子,編譯一個(gè)STM32例程的MDK軟件工程,得到輸出信息如下:

      接下來(lái)詳細(xì)看下Program Size的組成部分解析(我們燒錄文件的組成部分):

Code:程序代碼段,主要用于儲(chǔ)存程序代碼。

Ro-data:只讀類型數(shù)據(jù)段,主要用于存放程序中定義的常量。

RW-data:讀寫類型數(shù)據(jù)段,主要用于存放被初始化為非0值的全局變量。

ZI-data:讀寫類型數(shù)據(jù)段,主要用于存放被初始化為0值的全局變量。

看到這里你可能會(huì)有點(diǎn)好奇都是讀寫數(shù)據(jù)類型,為什么要分為RW和ZI兩個(gè)部分呢?(思考一下,文章后面會(huì)給出答案)。

      通常我們所說(shuō)的MCU的存儲(chǔ)部分主要是片內(nèi)Flash和片內(nèi)RAM,這里我可以簡(jiǎn)單地把片內(nèi)忽略掉,那么我們燒錄文件中的四個(gè)段內(nèi)容,哪些需要燒錄到Flash?哪些又要燒錄到RAM中呢?你知道對(duì)工程Map一下,在map文件的最后會(huì)給出答案。(map的含義就是內(nèi)存映射,map一下就是查看所有的代碼及數(shù)據(jù)的內(nèi)存映射地址),如下:

RO size:包含了Code 和RO data ,是需要存放在MCU的flash空間中。

RW size: 包含了RW 和 ZI data,是需要存放在MCU的RAM空間中。

那么是不是flash中的內(nèi)容就是RO size ,RAM中的內(nèi)容就是 RW size呢?

答對(duì)了一半,RAM中內(nèi)容就是RW size。

而flash的中的真實(shí)內(nèi)容應(yīng)該是 ROM Size。是不是很神奇?(比RO SIZE多了個(gè) RW,RW不應(yīng)該是放在RAM中?WHY???)

RW的神奇之處:他雖然是讀寫類型的數(shù)據(jù),但是他是非0的數(shù)據(jù),也就是上電初始化過(guò)程中,要對(duì)其進(jìn)行非0初始化,那么這些特定的非0值從哪里來(lái)呢?只能先把用于初始化的數(shù)據(jù)放到flash中了,從flash中讀取值,然后寫入RAM中相應(yīng)的RW數(shù)據(jù)內(nèi)部。

所以flash中還需要存儲(chǔ)RW的初始數(shù)據(jù)值。


當(dāng)你完成hex或者bin文件的燒錄以后,MCU內(nèi)部存儲(chǔ)數(shù)據(jù)分布如下:

當(dāng)MCU上電開始運(yùn)行以后,存儲(chǔ)分布會(huì)發(fā)生一些微妙的變化(看破不說(shuō)破,嘗試自己分析下why會(huì)這樣?):

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