这段时间使用STM32F103C8T6芯片做项目,要使用芯片中的Flash存储用户信息,其Flash有128K Bytes(其中64KB还是未检测,但是可用的),很大一部分用于存储程序代码以及相关的变量等,剩下的可以作为断电保存数据的存储,要知道什么位置可用,需要知道代码的所占用的空间大小。
烧写到单片机所占用的空间,可以看编译结果的中的Program Size项获取,之前对Keil编辑后的Program Size比较困惑,它们代表了些什么,这回有了了解。
图1 存储模式示意
- Code
代码占用空间,占用Flash空间;
- RO-data (Read Only)
只读常量,如const类型的常量,也占用Flash空间;
- RW-data (Read Write)
可读写数据,一般是全局变量,先要保存在Flash中,初始化后,再由Flash拷贝到RAM,占用Flash空间和RAM空间;
- ZI-data
栈空间(Stack)及堆空间(Heap)所需的空间,申请的内存空间用于局部变量进行堆栈处理,只占RAM空间。
举例:
Program Size: Code=22640 RO-data=2856 RW-data=1280 ZI-data=3464 (单位:字节)
Flash size:Code + RO-data + RW-data=22640+2856+1280=26776字节;
RAM size:RW-data + ZI-data=1280+3464=4744字节;
知道了这些后,就可以合理安排Flash的空间了。