1.查看内存RAM与Flash占用大小

keil编译工程后,双击工程项目名称,可以打开.map文件,这个文件包含了各个函数和文件占用的空间大小和地址

Keil如何监控变量_Keil如何监控变量

Code:代码段,存放程序的代码部分(占用的空间为内部Flash);

RO data:只读数据段,存放程序中定义的常量(const常量,#define宏常量);

RW data:读写数据段,存放程序中定义并且初始化的全局变量和静态变量;

ZI data:0数据段,存放程序中定义了但没有初始化的全局变量和静态变量;

编译后的.map文件说明了各个函数占用的尺寸和地址,在文件的最后几行说明了上述几个字段的关系:

Total RO  Size (Code + RO Data)                14088 (  13.76kB)
    Total RW  Size (RW Data + ZI Data)              1704 (   1.66kB)
    Total ROM Size (Code + RO Data + RW Data)      14092 (  13.76kB)

(1)Total RO  Size (Code + RO Data)        14088 (  13.76kB),表示程序占用Flash空间的大小;

(2)Total RW  Size (RW Data + ZI Data)       1704 (   1.66kB),表示运行时占用的RAM大小;

(3)Total ROM Size (Code + RO Data + RW Data)      14092 (  13.76kB),表示烧写程序所占用的Flash空间大小(生成bin文件大小)。

2.RAM与Flash的特点

分类

RAM

Flash

容量

容量小

容量大

读写速度



掉电易失

掉电易失

掉电不易失

价格

高昂

低廉

应用场合

程序运行中数据变量的运算

存储代码或者常量数据

单片机Flash主要用作程序存储器,就是替代以前的ROM,最大的优点是降低了芯片的成本并且可以做到电擦写,目前市场上单片机的Flash寿命相差比较大,擦写次数从1000~10万的都有,但存储时间可以保证40年,在选用时要注意。有一些廉价的单片机为了集成可掉电的数据存储器,没有选用价格昂贵的EEPROM,而用flash来做的,但要注意其寿命最多就10万次,而且擦写不能字节擦除,这要注意使用的场合其寿命是否瞒满足要求。

RAM是数据存储器,跟计算机里面的内存差不多,主要用来存放程序运行中的过程数据,掉电后就会丢失之前的数据,所以程序在上电时需要进行初始化,否则上电后的数据是一个随机数,可能导致程序崩溃。

ROM就是程序存储器,掉电后数据不会丢失,但在程序运行过程中其数据不会改变。早起的单片机的ROM因为擦写修改麻烦,价格昂贵或者价格低廉的OTP型无法修改数据等原因已经被现在的Flash存储器替代了。因为Flash的擦写很容易,现在的部分单片机支持在线内部编程,通过特性的程序执行方式可以修改Flash的内容,而实现在线修改程序存储器。这与上面说的程序存储器的内容在运行的时候不可改变是不冲突的,因为程序正常运行时,其内容不会改变,只工作在制度状态下的。