STM32 FLASH和SRAM的使用情况分析
01前言STM32带有片上FLASH和SRAM。简而言之,FLASH用于存储程序,而SRAM用于存储正在运行的程序中的中间变量。
本文详细分析了如何检查程序中FLASH和SRAM的使用情况。本文中的开发工具:keil5芯片:STM32F105VCT6 02 FLASH和SRAM简介FLASH存储器再次成为闪存。
它和EEPROM都是断电后不会丢失数据的存储器,但是FLASH的存储容量通常大于EEPROM的存储容量。在存储控制方面,最主要的区别是FLASH芯片只能大面积擦除,而EEPROM可以单字节擦除。
SRAM是静态随机存取存储器。它是一种具有静态访问功能的存储器,可以在不刷新电路的情况下保存其中存储的数据。
STM32F1系列可以通过FSMC外设扩展SRAM。注意:SRAM和SDRAM不相同。
SDRAM是同步动态随机存取存储器。同步意味着存储器需要一个同步时钟。
内部命令的传输和数据传输均基于此;动态意味着存储阵列需要不断刷新。确保数据不会丢失;随机表示数据不是线性顺序存储,而是自由指定的地址进行数据读写。
STM32的F1系列不支持SDRAM。不同型号的stm32的SRAM和FLASH大小不同,可以在数据表中查看下图:03编译结果分析keil中的编译结果如下:打开生成的映射文件并将其拉到末尾。
请参见以下内容:编译结果的内部内容代码的含义:代码空间,本质上是ARM指令(FLASH)。 RO数据:只读数据,表示程序定义的常量,例如const type(FLASH)。
RW数据:读取Write数据,非零初始化的全局和静态变量占用的RAM大小,以及相同数量的ROM大小用于存储这些非零变量的初始值(FLASH + RAM) 。 ZI数据:零初始化数据,存储区的大小由0初始化(该区域有3种用途:0初始化的全局和静态变量+堆区+堆栈区)(RAM)。
从上面可以看出:该程序占用的FLASH =代码+ RO-数据+ RW-数据是映射文件中的ROM大小。 RAM被程序占用。
= RW数据+ ZI数据问题:1.为什么RW数据同时占用闪存和RAM空间?从上一篇文章中,我们知道断电时RAM数据将丢失。 RW-data是非零初始化数据。
初始化后的数据需要存储在闪存中,断电后不会丢失。上电后,它将从闪存移至RAM。
2.为什么刻录的图像文件不包含ZI数据?众所周知,在对程序进行编程时,需要将bin文件或hex文件刻录到STM32闪存中。刻录的文件称为图像文件图像。
图像的内容包括这三个Code,RO数据和RW数据。每个人都应该从第一个问题中了解,因为ZI数据为0,因此无需将其包括在内。
只要在程序运行之前清除ZI数据区域,包括ZI数据区域,就会浪费Flash存储空间。免责声明:本文内容经21ic授权后发布,版权归原作者所有。
该平台仅提供信息存储服务。本文仅代表作者的个人观点,并不代表该平台的立场。
如有任何疑问,请与我们联系,谢谢!
以上内容来自于网络,不代表本公司本网站同意其观点及内容。