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

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

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

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

 

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

 

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
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中运行,单片机的代码运行位置跟电脑有什么不同?

你可能感兴趣的:(stm32内部外设驱动,单片机,keil,mdk,stm32)