将stm32 flash和栈相结合,将栈底位置设置成flash地址,可不可以?

发布时间 2023-06-07 13:23:20作者: 颖风船

 

在使用stm32产生了一个疑问,可不可以将栈底位置设置成flash的某个具体位置,这样就可以将参数写入读取,于是便探寻可行性。

 

在STM32中,Flash存储器用于存放程序代码,而栈通常用于存放临时数据和变量。根据STM32架构设计,Flash和SRAM两者之间是相互独立的,Flash的写入和读取速度相对较慢,因此不适合作为临时数据存储区域。

在将栈底位置设置成Flash地址时,可能会引起一些问题和不可预期的情况。因为栈底指针一般是在程序运行时动态变化的,如果将栈底位置设置成Flash地址,可能会导致覆盖程序代码,从而引起程序运行失常。

另外,即使将栈底位置设置成Flash地址,在访问Flash存储器时也要遵循Flash的写入和读取规则,即先进行擦除操作再进行写入操作,而且每个Flash存储器块只能擦除一次。因此,如果将栈底位置设置成Flash地址,会增加擦除Flash的次数,导致Flash的使用寿命缩短。

因此,不建议将栈底位置设置成Flash地址。在STM32中,可以使用SRAM作为栈底存储器区域,也可以使用另外的存储器作为自定义存储区域,来存放临时数据和变量。