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

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

[复制链接]
贺工 发布时间:2017-10-22 00:12
1:Code、RO-data、RW-data和ZI-data7 @3 j) d: ~+ N9 z1 {+ |( D5 k( n: Y
STM32单片机在keil开发环境下编译完成后,会显示:
4 ^% Q3 F( ]- kProgram Size: Code=XXXX RO-data=XXXX RW-data=XXXX ZI-data=XXXX  
+ b; b% B- L1 {/ y如图1所示:
4 K; N- K( `6 ], z6 f9 |
3_1.PNG
                     图1 编译后窗口显示

. i( O, U7 |% }1 ?9 }; e
其中Code、RO-data、RW-data和ZI-data是什么意思呢?
# E! d8 e; r1 |+ j01:Code 代表执行的代码,程序中所有的函数;# R* Y/ E* k0 o# V" I
02:RO-data 代表只读数据,程序中所定义的全局常量数据;( ~# K5 w3 j& @' G
03:RW-data代表已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量;
4 U9 @3 s& w; H. u$ a- m4 _04:ZI-data代表定义了但未初始化的可读写数据,ZI英语是zero initial,就是程序中用到的变量并且被系统初始化为0的变量的字节数,keil编译器默认是把你没有初始化的变量都赋值一个0,这些变量在程序运行时是保存在RAM中的。
3 D! _, I  y: a. z' k; J+ w8 @8 H5 t" [' W
1 K% m' R( C. S9 v8 l& J2 d
2:.map文件分析
/ i+ x( o6 [$ D.map文件位于生成工程中的Listings文件夹下,打开可以看到图2显示内容:
  ?! s) W( ^! a: Z" ? 3_3.PNG
+ F% Z( j* O) G* k; n: R$ R     图2 .map文件编译信息显示- G4 l% y( w2 K% D# P

; P5 L; R0 T5 |5 [" ]6 c
发现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值,程序才能在单片机中正常运行。
6 M. J9 S/ d- }8 z4 k
更多精彩内容请微信扫码关注
QQ图片20171014213345.png
附:
之前发过的帖子
01:

" }4 d& g( w+ \' N* |03:轻松搞定串口通信隔离* ~/ |9 O: \1 j* H' e9 ]$ Z
04:STM32中断优先级管理
1 {! j" [% o6 i0 k1 X" U9 D2 S
+ R" E$ ^- T- m. J0 Z
# K- W! j$ m/ B' p- K% q
' r) @! P' M( h* G# q
* O! j  u4 }' {! O7 f

5 R- |2 G+ O* l

评分

参与人数 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 手机版