你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

真的明白Code、RO-data、RW-data和ZI-data吗?

[复制链接]
贺工 发布时间:2017-10-22 00:12
1:Code、RO-data、RW-data和ZI-data8 I* B: m/ F( \+ g# m
STM32单片机在keil开发环境下编译完成后,会显示:
0 c- c3 X& L- ?. ]8 CProgram Size: Code=XXXX RO-data=XXXX RW-data=XXXX ZI-data=XXXX  3 I- a8 Y, ?; x* @
如图1所示:9 U& H! L5 J) z
3_1.PNG
                     图1 编译后窗口显示

4 [- _2 Z& v( U- g9 ?) e) |
其中Code、RO-data、RW-data和ZI-data是什么意思呢?
. |% A' \- s4 D6 u01:Code 代表执行的代码,程序中所有的函数;
7 l# L2 R# w, m" b; N% f02:RO-data 代表只读数据,程序中所定义的全局常量数据;
+ W- p, `) [/ N* T, d) G; k03:RW-data代表已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量;9 R" J- j3 R# v6 O# X3 m
04:ZI-data代表定义了但未初始化的可读写数据,ZI英语是zero initial,就是程序中用到的变量并且被系统初始化为0的变量的字节数,keil编译器默认是把你没有初始化的变量都赋值一个0,这些变量在程序运行时是保存在RAM中的。$ N* l! [$ v' j
! m3 Y( Y' E' q& G2 B
9 I  M$ X! W4 ?$ Z: M
2:.map文件分析
( ?" H& ~6 \5 \! w5 U5 j.map文件位于生成工程中的Listings文件夹下,打开可以看到图2显示内容:
& U. [" V$ o2 r& ]2 d 3_3.PNG
2 d1 ^" d  p+ H) x     图2 .map文件编译信息显示
2 V0 ]3 f8 \4 d& u6 w" Q8 P. D* ^* X
3 R- Z  u9 B" }0 n2 ]
发现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值,程序才能在单片机中正常运行。
. F- W+ \7 |9 l3 z
更多精彩内容请微信扫码关注
QQ图片20171014213345.png
附:
之前发过的帖子
01:

: {/ f! ?9 |4 t03:轻松搞定串口通信隔离
/ [- O* j3 K/ |& |. i& \# |* y. O04:STM32中断优先级管理
1 z" z9 e& I. }% }2 ]8 P9 g0 i3 o' X
5 v. u! ~: H$ u

( p+ U; p8 B+ `' `# J2 `1 _
; D  x. V" B/ k) ~. C6 _
, b+ q* N/ |+ z

评分

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

查看全部评分

1 收藏 3 评论0 发布时间:2017-10-22 00:12

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版