Keil编译后查看代码/内存占用空间,Flash/RAM占用大小,Code-Data,RO-Data,RW-Data,ZI-Data是什么含义

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

工程编译后,双击上图中红框位置,会打开 .map文件,包含了各个函数和文件占用的空间大小和地址。

  1. Code-Data,RO-Data,RW-Data,ZI-Data 分别是什么含义
    Code-Data:代码占用的空间大小(占用的空间为内部Flash)

RO-Data:只读常量大小(const常量,#define宏常量。一般用于不需要更改的数据)

RW-Data:初始化了的变量大小

ZI-Data:没有初始化的变量

工程总计占用的 Flash大小:Total ROM Size (Code + RO Data + RW Data)

工程总计占用的 RAM大小:Total RW Size (RW Data + ZI Data)

编译器显示的单位是 Byte字节。

  1. 单片机中的Flash是干什么的?以及为什么占用Flash的大小为 Code + RO Data + RW Data
    Tips:单片机与电脑/linux嵌入式 在代码运行的空间上不同。大多数单片机,代码都是在Flash中运行的。而电脑/linux嵌入式,是将代码从存储介质(可能是硬盘/SD卡/EMMC/NAND)中读出,拷贝到RAM,再在RAM中去执行代码。

因为单片机的运行速度一般都比较慢,Flash的读取速度足够跟得上代码运行的速度。并且在单片机内部都会有Flash预读操作,相当于提前读取Flash代码段放入缓存,CPU运行代码时直接从缓存中读,不需要等待Flash读取完成,从而加快单片机的读取和运行速度。代码在Flash中运行,这样做的好处是可以减少RAM的占用,减少生产的硬件成本。

而电脑/linux嵌入式则不一样,运行速度较为迅速,Flash的读取速度远远跟不上代码运行的速度,如果这时还在Flash中运行代码,则会严重影响代码的执行速度。所以要先将代码从存储介质(可能是硬盘/SD卡/EMMC/NAND)中读出,拷贝到RAM,在RAM中去执行代码。

特别注意:并非所有的单片机都是在Flash中运行代码,像stm32H7系列、NXP 的i.MX RT系列 就是代码在RAM中运行的。这类MCU的特点是运行速度非常快,远超一般单片机。它们内部Flash更像 Cortex-A嵌入式处理器中的 BootROM,内置Flash很小,几乎都是用来执行出厂配置代码的,用户很少用,都是将代码存放于外置的Flsh中。

还有一种情况,就是系统比较复杂的情况,也需要将代码运行于RAM上。用户可自行将代码拷贝到RAM中运行,并用函数指针去调用RAM中的注册函数。

  1. 常用单片机的 Flash/RAM 空间大小
    常用STM32单片机的 Flash/RAM 空间大小
    型号
    Flash Size

RAM Size
STM32F030f4p6 16KBytes 4KBytes
STM32F030c8t6 64KBytes 8KBytes
STM32F030rct6 256KBytes 32KBytes
STM32F103c8t6 64KBytes 20KBytes
STM32F103rct6 256KBytes 48KBytes
STM32F103zet6 512KBytes 64KBytes
STM32F407vet6 512KBytes 192KBytes
STM32F407zet6 512KBytes 192KBytes
STM32F407zgt6 1024KBytes 192KBytes

相关链接:为什么单片机的代码在Flash中运行,单片机的代码运行位置跟电脑有什么不同?
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/Mark_md/article/details/107896892

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值