STM32开发笔记13: 在keil中使用不初始化变量

本文介绍了在Keil环境下,针对STM32单片机如何避免变量在系统复位时初始化,以保持异常复位前的现场状态。通过修改链接设置和分散文件,将RAM分为初始化和不初始化两部分,详细步骤包括取消Use Memory Layout from Target Dialog选项,自定义分散文件添加UNINIT节点。同时,需定义全局未赋初值的变量并指定存储位置。在上电时,通过特定变量的随机值判断并初始化变量,确保程序正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单片机型号:STM32F030R8


    我们进行程序设计的时候,都会知道,系统上电或复位时,会执行变量初始化操作,但是有些情况下,我们并不希望变量初始化,例如,在系统异常复位发生后,我们希望系统能够迅速恢复复位前的现场状况,这样就希望变量能够保留原先的值,而不被初始化。实际上,大家都知道,变量是存储在RAM中的,只要不掉电,变量的数值是不会改变的,只要我们不让系统进行初始化操作就可以了。

    不同的编译环境,有不同的设置方法,本文介绍在Keil中设置不初始化变量的方法。在这里需要说明的是,网上介绍了许多的设置方法,但并不是所有的方法都起作用,本文将介绍一种最为直接的方法。

    1、打开Options for Target对话框Linker标签,勾选掉Use Memory Layout from Target Dialog,这个选项的意思是使用Target标签进行链接设置,所以在其勾选的情况下,分散文件是不能自己编辑的,勾选掉以后,我们就可以进行分散文件的设置了。

    2、点击分散文件后面的Edit按钮,打开分散文件,按下图所示的方法,增加节点。原先仅有一个RAM节点,其起始地址是0x20000000,其长度是0x00008000。我们新编辑的分散文件,将RAM分为2部分,第1部分长度为0x7000,第2部分长度为0x1000,并将第2部分设置为UNINIT,也就是不初始化,显式节点名为NO

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

snmplink

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值