搜索
查看: 2611|回复: 0

[原创] 真的明白Code、RO-data、RW-data和ZI-data吗?

[复制链接]

该用户从未签到

9

主题

102

帖子

0

蝴蝶豆

高级会员

最后登录
2018-9-25
发表于 2017-10-22 00:12:12 | 显示全部楼层 |阅读模式
1:Code、RO-data、RW-data和ZI-data
STM32单片机在keil开发环境下编译完成后,会显示:
Program Size: Code=XXXX RO-data=XXXX RW-data=XXXX ZI-data=XXXX  
如图1所示:
3_1.PNG
                     图1 编译后窗口显示

其中Code、RO-data、RW-data和ZI-data是什么意思呢?
01:Code 代表执行的代码,程序中所有的函数;
02:RO-data 代表只读数据,程序中所定义的全局常量数据;
03:RW-data代表已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量;
04:ZI-data代表定义了但未初始化的可读写数据,ZI英语是zero initial,就是程序中用到的变量并且被系统初始化为0的变量的字节数,keil编译器默认是把你没有初始化的变量都赋值一个0,这些变量在程序运行时是保存在RAM中的。


2:.map文件分析
.map文件位于生成工程中的Listings文件夹下,打开可以看到图2显示内容:
3_3.PNG
     图2 .map文件编译信息显示

发现KEIL编译后显示的是图中Grand Totals/ELFImage Totals, 而实际存储在ROM中的数据并不包含ZI-Data(因为ZI-Data未初始化,对于MDK并不需要单独提供地址保存其初始化数据)。
01:程序编译后的HEX文件大小=Total ROM Size的值=(Code+ROData+RW Data);图2中显示表示编译后HEX文件大小2.09KB,这个就是实际烧录到单片机Flash里面的程序文件大小。单片机选型时要注意单片机的Flash容量。
02:程序实际在单片机RAM中运行的数据大小=Total RW Size的值=(RWData+ZI Data);
总之,只有单片机的实际Flash容量大于等于程序编译后的Total ROM Size值,且单片机的实际RAM容量大于等于编译后的Total RW Size值,程序才能在单片机中正常运行。

更多精彩内容请微信扫码关注
QQ图片20171014213345.png
附:
之前发过的帖子
01:

03:轻松搞定串口通信隔离
04:STM32中断优先级管理





评分

参与人数 1ST金币 +5 收起 理由
shaoziyang + 5 很给力!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-27 07:30 , Processed in 1.172036 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表