MCU复位RAM会保持吗,如何实现复位时变量数据保持

[复制链接]
1200|2
手机看帖
扫描二维码
随时随地手机跟帖
聚沃科技|  楼主 | 2024-8-15 09:30 | 显示全部楼层 |阅读模式
在使用MCU时,通常大家默认MCU复位时RAM会被复位清零,那实际MCU复位时RAM是什么状态?如何让mcu复位时RAM保持不变呢?
MCU复位有电源复位、Standby复位、内核复位、看门狗复位、引脚复位等。
图片5.png
其中内部会有掉电动作的复位有电源复位和Standby复位,由于内部电路有掉电所以这些复位RAM是无法保持的,RAM会处于随机值状态,实际也不是0值。其他复位由于不掉电,本质上是不会直接复位RAM的。
那为什么一般执行了软件复位和看门狗复位后RAM会复位,没有初始化的变量值变成0呢?实际上是因为编译器自动生成的RAM初始化代码在MCU启动后进入main函数前完成的,这些函数我们通过查看编译后的map文件可以找到他们踪迹。
图片6.png
Keil为例,编译后输出信息里会看到RW-DATAZI-DATA,其中ZI-DATA就是没有给定初始化值或初始化值给定为0的全局数据。
打开工程设置,在RAM/IRAMMemory配置里有一个NOINIT的勾选,勾选后就可以配置为不初始化属性,编译器将不对这个区域的全局变量进行初始化赋值。
图片7.png
如果我们有希望复位后还能保持的RAM变量可以定义在配置了NOINITRAM区域中。
除了直接在工程配置里修改,如果自行编写链接文件,也可以添加NOINIT字段来进行配置。
图片8.png

教程由GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网,GD32MCU技术交流群:859440462

使用特权

评论回复
duo点| | 2024-8-16 15:40 | 显示全部楼层
支持GD,支持国产芯片

使用特权

评论回复
duo点| | 2024-8-16 15:40 | 显示全部楼层
希望GD的生态原来越好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

170

主题

190

帖子

9

粉丝