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

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

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

 

 

2. 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字节

 

3. 单片机中的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中的注册函数。

 

4. 常用单片机的 Flash/RAM 空间大小

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

Flash Size

RAM Size
STM32F030f4p616KBytes4KBytes
STM32F030c8t664KBytes8KBytes
STM32F030rct6256KBytes32KBytes
STM32F103c8t664KBytes20KBytes
STM32F103rct6256KBytes48KBytes
STM32F103zet6512KBytes64KBytes
STM32F407vet6512KBytes192KBytes
STM32F407zet6512KBytes192KBytes
STM32F407zgt61024KBytes192KBytes

 

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

  • 10
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值