当前位置: 首页 > news >正文

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

在使用MCU时,通常大家默认MCU复位时RAM会被复位清零,那实际MCU复位时RAM是什么状态?如何让mcu复位时RAM保持不变呢?

MCU复位有电源复位、Standby复位、内核复位、看门狗复位、引脚复位等。

其中内部会有掉电动作的复位有电源复位和Standby复位,由于内部电路有掉电所以这些复位RAM是无法保持的,RAM会处于随机值状态,实际也不是0值。其他复位由于不掉电,本质上是不会直接复位RAM的。

那为什么一般执行了软件复位和看门狗复位后RAM会复位,没有初始化的变量值变成0呢?实际上是因为编译器自动生成的RAM初始化代码在MCU启动后进入main函数前完成的,这些函数我们通过查看编译后的map文件可以找到他们踪迹。

以Keil为例,编译后输出信息里会看到RW-DATA和ZI-DATA,其中ZI-DATA就是没有给定初始化值或初始化值给定为0的全局数据。

打开工程设置,在RAM/IRAM的Memory配置里有一个NOINIT的勾选,勾选后就可以配置为不初始化属性,编译器将不对这个区域的全局变量进行初始化赋值。

如果我们有希望复位后还能保持的RAM变量可以定义在配置了NOINIT的RAM区域中。

除了直接在工程配置里修改,如果自行编写链接文件,也可以添加NOINIT字段来进行配置。

更多GD32 MCU相关咨询:https://www.gd32bbs.com/ 


http://www.mrgr.cn/news/469.html

相关文章:

  • 网络编程 8/15 基于UDP多人聊天室
  • linux部署elasticserch单节点
  • js取消焦点事件
  • 【边缘计算与智能家居】边缘计算在智能家居中的应用
  • c#实现数据导出为PDF的方式
  • Java用JNA调用dll : Invalid memory access
  • 稚晖君发布5款全能人形机器人,开源创新,全能应用
  • 一元闯关游戏
  • 宝塔面板部署webman项目+nginx反向代理
  • 深度学习--转换拼接问题 + TensorFlow包弃用问题
  • 在MuMu模拟器中的游戏如何设置变声器?电脑变声器开麦就变声!6款实时变声软件!TM真的炫!
  • SQLite3使用接口写入二进制文件
  • 高级java每日一道面试题-2024年8月15日-设计模式篇-设计模式与面向对象原则的关系是什么?
  • 构筑信息安全的桥梁:安全信息交换(SIX)全面解析
  • C++之函数传参方式
  • ImageMagick从pdf导出高清图片
  • 宝兰德荣获openEuler项目群青铜捐赠人称号,共筑开源生态繁荣新篇章
  • STM32标准库学习笔记-9.DMA 直接存储器存取
  • 二、前后端分离通用权限系统(2)
  • 笑出腹肌!Ubuntu:如果连猫都会用,那你呢?‍