99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

嵌入式小知識:燒錄文件是被如何存儲到MCU中的?


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

      舉一個簡單的例子,編譯一個STM32例程的MDK軟件工程,得到輸出信息如下:

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

Code:程序代碼段,主要用于儲存程序代碼。

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

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

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

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

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

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

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

那么是不是flash中的內容就是RO size ,RAM中的內容就是 RW size呢?

答對了一半,RAM中內容就是RW size。

而flash的中的真實內容應該是 ROM Size。是不是很神奇?(比RO SIZE多了個 RW,RW不應該是放在RAM中?WHY???)

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

所以flash中還需要存儲RW的初始數據值。


當你完成hex或者bin文件的燒錄以后,MCU內部存儲數據分布如下:

當MCU上電開始運行以后,存儲分布會發生一些微妙的變化(看破不說破,嘗試自己分析下why會這樣?):

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 6
收藏 6
關注 151
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 制服丝袜自拍另类第1页 | a一级黄色 | 91freehdxxxx欧美| 久久精品人妻无码一区二区三区 | 特黄大片AAAAA毛片 | 日韩毛片免费视频一级特黄 | 日韩精品视频在线观看视频 | 久久噜噜| av视屏| 国产乱插| 少妇激情一区二区三区视频 | 囯产精品一品二区三区 | 亚洲av中文无码字幕色最 | 亚州欧美日韩 | 人妻夜夜添夜夜无码AV | 99久久免费国产 | 无码国内精品人妻少妇蜜桃视频 | 17草视频| 亚洲国产精品综合小说图片区 | 精品国内二区三区 | 日本一区二区不卡在线 | 日韩国产一区二区三区 | 国产被窝福利一区二区 | 亚洲乱仑| 欧洲免费无线码在线一区 | 四虎亚洲精品私库AV在线 | 18禁止进入1000部高潮网站 | 欧美在线视频免费看 | 伊人精品网 | 中国丰满熟妇xxxx性 | 麻豆av一区二区三区久久 | 亚洲欧美日韩中文加勒比 | 国产成人精品怡红院在线观看 | 一线天逼逼 | 一区二区三区四区视频免费观看 | 91精品国产日韩一区二区三区 | 亚洲AV久久久噜噜噜熟女软件 | 亚洲国产精品成人av | 91动漫网站 | 一区二区三区在线免费 | 国产精品自产拍在线观看55亚洲 |