1.查看内存RAM与Flash占用大小
keil编译工程后,双击工程项目名称,可以打开.map文件,这个文件包含了各个函数和文件占用的空间大小和地址
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的内容,而实现在线修改程序存储器。这与上面说的程序存储器的内容在运行的时候不可改变是不冲突的,因为程序正常运行时,其内容不会改变,只工作在制度状态下的。