Keil 编译内存信息:Program size: Code, RO-data , RW-data, ZI-data
1、Code 是代码占用的空间。
2、RO-data是 Read Only 只读常量的大小,如const型
3、RW-data是(Read Write) RW是可读可写变量,就是初始化时候就已经赋值了的,RW + ZI就是你的程序总共使用的RAM字节数。
4、ZI-data是(Zero Initialize) 没有初始化的可读写变量的大小,就是程序中用到的变量并且被系统初始化为0的变量的字节数,keil编译器默认是把你没有初始化的变量都赋值一个0,这些变量在程序运行时是保存在RAM中的。
Program size: Code, RO-data , RW-data, ZI-data
一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘。
现在我们就一个STM32的工程为例子
linking...
Program Size: Code=11720 RO-data=1268 RW-data=108 ZI-data=1388
FromELF: creating hex file...
"..\object\BootLoader.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:05
上面提到的 Program Size 包含以下几个部分:
(1)Code:代码段,存放程序的代码部分;
(2)RO-data:只读数据段,存放程序中定义的常量;
(3)RW-data:读写数据段,存放初始化为非 0 值的全局变量;
(4)ZI-data:0 数据段,存放未初始化的全局变量及初始化为 0 的变量;
编译完工程会生成一个. map 的文件,该文件说明了各个函数占用的尺寸和地址,在文件的最后几行也说明了上面几个字段的关系:
==============================================================================
Code (inc. data) RO Data RW Data ZI Data Debug
11720 1356 1268 108 1388 267457 Grand Totals
11720 1356 1268 108 1388 267457 ELF Image Totals
11720 1356 1268 108 0 0 ROM Totals
==============================================================================
Total RO Size (Code + RO Data) 12988 ( 12.68kB)
Total RW Size (RW Data + ZI Data) 1496 ( 1.46kB)
Total ROM Size (Code + RO Data + RW Data) 13096 ( 12.79kB)
==============================================================================
RO Size (Code + RO Data) ,表示程序占用Flash空间的大小。
RW Size (RW Data + ZI Data),表示运行时占用的RAM的大小。
ROM Size (Code + RO Data + RW Data) ,表示烧写程序占用的Flash空间的大小。