Code:通常是指编译器生成的机器指令,也就是程序的执行代码,这些内容会被存储到ROM区。
RO-data:它指程序中用到的只读数据,因而程序不能被修改的内容,这些数据被存储在ROM区。 RO-data区典型:
例1、C语言中const关键字定义的变量。
例2、C语言中定义的全局常量。
例3、C语言中定义的字符串。
RW-data:即可读写数据区域,一定是初始化为“非0值”的可读写数据,而且应用程序可以修改其内容,这些数据被存储在RAM区
RW-data区典型:
例1、C语言中定义的全局变量,且初始化为“非0值”。
例2、C语言中定义的静态变量。且初始化为“非0值”。
ZI-data:可读写数据区域,一定是未初始化或初始化为“0值”的可读写数据,应用程序同样可以修改其内容,这些数据被存储在RAM区
ZI-data区典型:
例1、C语言中定义的数组,只定义了数组的大小,并没有给每个成员赋非0值。
以下数据节选于程序的.map文件结尾。
Code (inc. data) RO Data RW Data ZI Data Debug
26260 1882 312 236 36628 656971 Grand Totals
26260 1882 312 236 36628 656971 ELF Image Totals
26260 1882 312 236 0 0 ROM Totals
=========================================================================
Total RO Size (Code + RO Data) 26572 ( 25.95kB)
Total RW Size (RW Data + ZI Data) 36864 ( 36.00kB)
Total ROM Size (Code + RO Data + RW Data) 26808 ( 26.18kB)
=========================================================================
总结: 在拿到一款单片机的时候,一定要明确单片机的ROM大小和RAM大小。
ROM的最小空间一定要大于: Code + RO Data + RW Data的总和;
RAM的最小空间一定要大于: RW Data + ZI Data之和
注意:
ROM就是单片机的FLASH大小
RAM就是单片机的运行内存大小
以STM32G070为例,ROM = 128kB;RAM = 36kB