最近开始留意MCU 的存储分配问题,所以我产生了一下疑问。同时,也有很多网友都有这个疑问。大家的观点答题相同,但又不尽详细。
参考文章:
http://anlx27.iteye.com/blog/1575848
http://www.mamicode.com/info-detail-1043059.html
http://limountain.blog.163.com/blog/static/478044492012311956956/
http://wenku.baidu.com/link?url=XLeK2pknOFaktA1vc9ojERVKUagsLX7A6h2R06ZNcwF7si-DfNHx8Y7goxycWRrfzTOjaW93lNFErTl3EjTQ8gEo0UAloEFWu0Slhhq4YsC
如,我用Keil/MDK 编译完工程,得到:
Program Size: Code=25648 RO-data=400 RW-data=800 ZI-data=8752
生成.map 文件copy过来的一段:
(生成的map文件位于list文件夹下 (KEIL))
==============================================================================
Code (inc. data) RO Data RW Data ZI Data Debug
25648 2554 400 800 8752 441136 Grand Totals
25648 2554 400 324 8752 441136 ELF Image Totals (compressed)网上有很多种解释,但是感觉都不够权威,最后我在Keil的帮助文档找到官方的解释:
如下面截图所示,
(1) Code(inc.Data) : 包含两部分,即代码和数据
- code,即程序代码部分
- inline data. For example, literal pools(文字常量池), and short strings(短字符串)等. 这个一般被忽略,请大家注意!!!
(2) RO Data: read-only data,只读的数据
Shows how many bytes are occupied by read-only data. This is in addition to the inline data included in the Code (inc. data) column. 除inline data 之外的所有只读数据。
(3) RW Data: read write data,可读写的数据
Shows how many bytes are occupied by read-write data.
(4) ZI Data: zero initialized data,零初始化的可读写变量
Shows how many bytes are occupied by zero-initialized data.
keil编译器默认是把你没有初始化的变量都赋值一个0。初始化为零,或者未初始化的变量,都存储于这个区域。
存储Size:
RO size: Code + RO_data
RW size: RW_data + ZI_data
ROM (minimum)size = Code + RO_data + RW_data (即烧/下载程序到FLASH/ROM时,所占用的最小空间)
Total ROM Size (Code + RO Data + RW Data)这样所写的程序占用的ROM的字节总数,也就是说程序所下载到ROM flash 中的大小。为什么Rom中还要存RW,因为掉电后RAM中所有数据都丢失了,每次上电RAM中的数据是被重新赋值的,每次这些固定的值就是存储在Rom中的,为什么不包含ZI段呢,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。
RAM size: RW Data + ZI Data (即程序运行的时,RAM使用的空间)
一个ARM程序包含3部分:RO段,RW段和ZI段
RO是程序中的指令和常量
RW是程序中的已初始化变量
ZI是程序中的零初始化的变量
由以上3点说明可以理解为:
RO就是readonly,
RW就是read/write,
ZI就是zero
//==================================================================================
//==================================================================================
相关知识
Keil/MDK 小知识点:Program size: Code, RO
飞火在线文章
leon/智能宠物项圈
基于STM32的物联网下智能化养鱼鱼缸控制控制系统
ro手游宠物抓取(ro宠物打工)(ro捉宠物)
【免费】springboot宠物医院管理系统180923资源
【免费】springboot宠物在线领养系统(附源码+数据库)51181资源
【免费】springboot宠物健康管理系统(源码+数据库)201738资源
《仙境传说RO》小魔女宠物怎么获得
zzeasy/宠物医院前后台系统
网址: Keil/MDK 小知识点:Program size: Code, RO https://m.mcbbbk.com/newsview1159205.html
上一篇: c#之WPF基础知识点(一) |
下一篇: 电视lcd与led有什么区别 小 |