实用指南:STM32存储结构
我们在使用Keil编译程序成功后会,有一行各部分占用内存的提示信息,如下
Program Size:Code=7492 RO-data=556 Rw-data=72 ZI-data=11688,这是stm32代码编译后的提示
我们分析一下这个编译输出:
- Code: 7492字节 -> 代码部分(存放在Flash)
- RO-data: 556字节 -> 只读材料(存放在Flash)
- RW-data: 72字节 -> 已初始化的读写内容(在Flash中存储初始值,运行时拷贝到RAM)
- ZI-data: 11688字节 -> 未初始化的数据(运行时在RAM中初始化为零)
所以,占用Flash的空间为:Code + RO-data + RW-data(缘于RW-data的初始值需要存储在Flash中) 即:7492 + 556 + 72 = 8120字节 ,只是注意,ZI-data不占用Flash空间,基于它只需要在程序运行时在RAM中分配并初始化为零。
因此,这个程序占用的Flash空间为8120字节。 另外,程序运行时占用的RAM空间为:RW-data + ZI-data = 72 + 11688 = 11760字节。
总结:
Flash占用:8120字节 约7.93KB
RAM占用:11760字节 约11.48kB
并且我们在购买单片机的时候会经常看到一下字样,Flash ,RAM等今天我们将解密他们究竟是什么
简单来说:
Flash大小:决定了你的程序代码能写多大,以及能存储多少常量数据(如图片、字体等)。如果你的软件很大,就要选Flash大的型号。
RAM大小:决定了你的程序运行时能同时使用多少变量和数据。如果你的软件需要处理大量数据、有很多全局变量、或者应用了困难的算法和递归,就需要更大的RAM。RAM不足是导致程序莫名崩溃的常见原因。
要想深入了解这些东西 必须我们对STM32存储器划分结构有一定了解
STM32的存储器结构采用了哈佛架构(Harvard Architecture),这意味着程序存储器(Flash)和数据存储器(RAM)