网站执行速度,做网站还得买域名吗,宁波品牌网站建设服务电话,商务网站建设考试在使用MCU时#xff0c;通常大家默认MCU复位时RAM会被复位清零#xff0c;那实际MCU复位时RAM是什么状态#xff1f;如何让mcu复位时RAM保持不变呢#xff1f;
MCU复位有电源复位、Standby复位、内核复位、看门狗复位、引脚复位等。 其中内部会有掉电动作的复位有电源复位…在使用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/