最近一个项目需要保存一下临时数据,而产品容易受干扰而复位。所以需要保存一下数据,那么只有在系统复位时候不再初始化变量即可。对应MDK(keil)来说是一个比较麻烦的问题。通过网络上找了大量资料和测试发现终于可以了。 在MDK(Keil)开发环境下,为了在单片机,如STM32,复位时保持变量的值不变,我们需要解决一个关键问题,即如何防止变量在复位时被自动初始化。通常,MDK会将全局变量和静态变量默认初始化为零。然而,根据项目需求,我们希望在复位后仍能保留某些临时数据。以下是实现这一目标的具体步骤和相关知识点: 我们需要在MDK的项目选项中进行设置。进入项目属性,然后选择"C/C++"或"Target"选项卡,找到"Output"类别。在这里,取消勾选"Generate Debug Information"下的"Initialize Variables"选项。这个设置将阻止编译器在复位时对全局变量进行初始化。 代码层面的处理至关重要。由于`__noinit__`不是一个标准的C关键字,而是MDK提供的一个特定于工具链的扩展,我们需要在变量声明前加上它来告诉编译器不要初始化该变量。例如: ```c #define __noinit__ __attribute__((zero_init)) __noinit__ int tmp; // 这个变量在复位时不会被初始化为0 ``` 或者,如果你更倾向于使用`__attribute__`语法,可以直接这样写: ```c __attribute__((zero_init)) int tmp; ``` 这里,`__attribute__((zero_init))`是告诉编译器变量`tmp`不应被初始化为0,从而保留其复位前的值。 需要注意的是,这样的变量将在程序运行时不会自动初始化,因此在程序开始执行之前,你需要确保它们已经被正确设置。如果复位后这些变量没有被正确赋值,它们将包含不确定的值,可能导致不可预见的行为。因此,为了确保数据的安全性,建议在程序开始时显式地对这些变量进行初始化,除非你确定它们在复位前已经包含了有效数据。 在单片机应用中,这种方法常用于保存一些关键状态信息,比如中断计数器、设备配置等,这些信息在复位后需要保持不变以避免重新配置。然而,这种方法并不适用于所有情况,对于需要安全性的应用,如金融设备或医疗设备,可能需要更高级别的保护措施,如使用非易失性存储器(如EEPROM)来保存关键数据。 总结,要在MDK环境下实现复位后变量不被初始化,你需要结合项目选项和代码修改两步操作。通过这种方式,你可以确保即使在受到干扰导致复位的情况下,特定的变量也能保留其之前的值,从而满足项目的需求。
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/12682938/bg1.jpg)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 5
- 资源: 950
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)