【摘录】根据keil5编译后Code RO-data RW-data ZI-data判断MCU的RAM和FLASH是否足够?
keil5编译后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中的。(未初始化的全局变量)
5.Total ROM Size (Code + RO Data + RW Data)这样所写的程序占用的ROM的字节总数,也就是说程序所下载到ROM flash 中的大小。为什么Rom中还要存RW,因为掉电后RAM中所有数据都丢失了,每次上电RAM中的数据是被重新赋值的,每次这些固定的值就是存储在Rom中的,为什么不包含ZI段呢,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。
6.MCU执行过程是先将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。然后将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM中。ROM中的指令完成了这两项工作后C程序才能正常访问变量。否则只能运行不含变量的代码。
8.简单的说就是在烧写的时候是FLASH中的被占用的空间为:Code + RO Data + RW Data
9.程序运行的时候,芯片内部RAM使用的空间为: RW Data + ZI Data
10.初始化时RW-data从flash拷贝到RAM
11.生成map文件位于list文件夹下
————————————————
版权声明:本文为CSDN博主「小路~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiabiboluo/article/details/121078393
告诉你如何从keil工程知道使用了多少RAM和ROM空间
我们常常在使用一款芯片的时候往往都会考虑芯片的RAM和ROM大小,因为这觉得了我们的很多功能,虽然可以采用外置的FLASH以及RAM芯片来扩展,但是无论使用了外置还是内置的空间,我们都需要去了解我们工程中使用了多少的RAM空间以及多少ROM空间。
今天我们就来分享一下如何快速从keil中查到使用了多少的空间,而在keil工程中一共两个地方可以查到。
首先第一个地方就是编译输出提示栏,当我们编译完后在下方的框中会看到这样的几行字:
红色的框告诉了我们,我们这个工程的大小,里面将了我们Code(代码)的空间大小,以及其他三种数据使用的空间大小。而我们从这四种数据也可以算出RAM和ROM空间使用量~
RAM = RW Data + ZI Data;
ROM = Code + RO Data + RW Data
到了这里,小伙伴肯定会想,这还要算,有没有直接一点的办法,直接告诉我用来多少的空间?
那当然有的,就是我们的第二种方法:
然后就会弹出里相应的map(Linker Address Map)文件,如工程名.map,其名字跟随工程名走,最后我们把文件内容往下翻,就会出现这样的内容:
这里面已经把我们的使用的RAM以及ROM空间情况一一列出,包括有使用的RW、RO数据的占用空间还有相应的链接文件所占用的空间大小。
————————————————
版权声明:本文为CSDN博主「OMGMac」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/OMGMac/article/details/126212273