当前位置: 首页 > 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.lryc.cn/news/429206.html

相关文章:

  • 解决window 端口的占用问题
  • 【Datawhale AI夏令营第四期】 浪潮源大模型应用开发方向笔记 Task04 RAG模型 人话八股文Bakwaan_Buddy项目创空间部署
  • PyTorch 基础学习(10)- Transformer
  • mybatis-plus使用
  • ant-design-vue快速上手指南及排坑攻略
  • 【GitLab】使用 Docker 安装 3:gitlab-ce:17.3.0-ce.0 配置
  • 多线程(4)——单例模式、阻塞队列、线程池、定时器
  • 告别电量焦虑,高性能65W PD快充芯片HUSB380A打造梦中情【头】
  • vulnhub靶场 — NARAK
  • RabbitMQ如何保证消息不丢失
  • (亲测有效)SpringBoot项目集成腾讯云COS对象存储(1)
  • 无人机之故障排除篇
  • 深入理解Python常见数据类型处理
  • 最佳实践:CI/CD交付模式下的运维展望丨IDCF
  • Flat Ads:开发者如何应对全球手游市场的洗牌与转型
  • ai取名软件上哪找?一文揭秘5大ai取名生成器
  • ppt转换成pdf文件,这5个方法一键搞定!小白也能上手~
  • 中国每个软件创业者都是这个时代的“黑悟空”
  • 解决Qt多线程中fromRawData函数生成的QByteArray数据不一致问题
  • datax关于postsql数据增量迁移的问题
  • 【Go】实现字符切片零拷贝开销转为字符串
  • [sqlserver][sql]sqlserver查询执行过的历史sql
  • python中n次方怎么表示
  • Java数组怎么转List,Stream的基本方法使用教程
  • 2024-07-12 - 基于 sealos 部署高可用 K8S 管理系统
  • Ps:首选项 - 单位与标尺
  • DiskDigger(文件恢复工具) v2.0.3 中文授权版
  • C/C++逆向:x96dbg(x64dbg/x86dbg)的使用
  • 超声波清洗机是智商税吗?专业博主分享四大必买超声波清洗机款式
  • TIM输出比较