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

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

[复制链接]
贺工 发布时间:2017-10-22 00:12
1:Code、RO-data、RW-data和ZI-data3 q' [# v$ N5 t
STM32单片机在keil开发环境下编译完成后,会显示:
4 _# L3 i3 N2 u1 r9 ?Program Size: Code=XXXX RO-data=XXXX RW-data=XXXX ZI-data=XXXX  
# d  k: N: T3 F& f$ u如图1所示:' B" a. k1 q# H
3_1.PNG
                     图1 编译后窗口显示

9 g6 b2 C' \" P
其中Code、RO-data、RW-data和ZI-data是什么意思呢?
7 Q  O2 Y9 i' W1 n01:Code 代表执行的代码,程序中所有的函数;
/ D3 J( T/ |" Z. {+ q6 [02:RO-data 代表只读数据,程序中所定义的全局常量数据;7 e6 }  ~. B) x& V0 ]/ R6 T
03:RW-data代表已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量;
7 c: e4 {2 D; M0 N  [04:ZI-data代表定义了但未初始化的可读写数据,ZI英语是zero initial,就是程序中用到的变量并且被系统初始化为0的变量的字节数,keil编译器默认是把你没有初始化的变量都赋值一个0,这些变量在程序运行时是保存在RAM中的。  s" W/ R  ^% p
" O% q' j& Y$ _3 W3 `8 {3 J" P

, v) v; M) g7 J! [8 p, a9 N9 K2:.map文件分析
  P/ D, K$ ~5 V6 n& c( P.map文件位于生成工程中的Listings文件夹下,打开可以看到图2显示内容:6 I2 R% m3 s" ?. a- Y# A) I- F
3_3.PNG # i9 X5 w; E  |8 n2 c) U" Q
     图2 .map文件编译信息显示
. p7 E2 ~( Y9 G: T8 ~! u0 q; v

/ G/ X& Z* ~7 |% [3 \! Q4 Z* s: 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值,程序才能在单片机中正常运行。
: f& `4 z9 ^3 P( q) A$ U5 Q+ p
更多精彩内容请微信扫码关注
QQ图片20171014213345.png
附:
之前发过的帖子
01:

$ }& o4 z4 P% M* s03:轻松搞定串口通信隔离" x' v- F8 w4 k
04:STM32中断优先级管理
- g# B& |" ?7 C& z: z
$ U- ?2 t5 o7 f3 H6 g, L! ]) u

6 Q# K  l! s) Q2 D
1 [4 T  W7 }8 m0 m5 e& ^9 N

! i, }5 X/ ?% W! G$ W; |. z3 k, @) T0 r$ f

评分

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

查看全部评分

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

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版