Advertisement

在Keil MDK中怎样设置非零初始值变量

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
本文详细介绍了如何在Keil MDK开发环境中为C/C++程序中的全局变量设置非零初始值的具体步骤和方法。 在一些工控产品中,系统复位(非上电复位)后可能需要保留RAM中的数据以快速恢复现场或避免因瞬间复位而重启设备。然而,默认情况下,Keil MDK会在任何形式的复位时将RAM区内的未初始化变量清零。如何设置这些未初始化的数据变量不被零初始化是本段落探讨的主题。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • Keil MDK
    优质
    本文详细介绍了如何在Keil MDK开发环境中为C/C++程序中的全局变量设置非零初始值的具体步骤和方法。 在一些工控产品中,系统复位(非上电复位)后可能需要保留RAM中的数据以快速恢复现场或避免因瞬间复位而重启设备。然而,默认情况下,Keil MDK会在任何形式的复位时将RAM区内的未初始化变量清零。如何设置这些未初始化的数据变量不被零初始化是本段落探讨的主题。
  • LinuxJava环境
    优质
    本教程详细介绍如何在Linux系统中配置Java环境变量,包括设置PATH和JAVA_HOME,帮助用户顺利安装并运行Java应用程序。 本段落详细介绍了如何在Linux上配置Java环境变量的过程,包括安装、配置、测试以及卸载的步骤。
  • MDK如何防止复位时被
    优质
    本文介绍了在MDK开发环境中,通过配置链接器设置和使用#pragma语句等方法来避免或控制程序变量在系统复位时被重新初始化的技术。 在最近的一个项目中,我们遇到了需要保存临时数据的需求,并且产品容易受到干扰导致复位的问题。因此,在系统复位时不重新初始化某些变量成为了解决方案的关键所在。 使用MDK(Keil)开发环境时,若想让单片机(如STM32)在复位后保持特定变量的值不变,则需防止这些全局或静态变量被默认设置为零。通常情况下,在项目中启用“Generate Debug Information”下的“Initialize Variables”选项会导致所有变量在每次系统启动或者复位时都被初始化为0,这与我们的需求相违背。 为了实现这一目标,请按照以下步骤操作: 1. 进入MDK项目的属性设置界面。 2. 选择CC++或Target选项卡,并转到Output类别下找到“Initialize Variables”选项。取消勾选它以禁止编译器在复位时对变量进行初始化处理。 此外,代码层面的调整也至关重要。使用`__noinit__`宏(该宏定义为`__attribute__((zero_init))`)来声明不需要自动初始化的变量: ```c #define __noinit__ __attribute__((zero_init)) // 使用示例: __noinit__ int tmp; // 这个变量在复位时不会被重置为0。 ``` 或者直接使用标准语法: ```c __attribute__((zero_init)) int tmp; ``` 需要注意的是,采用这种做法后,在程序启动前必须确保这些特殊声明的变量已经被正确初始化。如果未进行适当的赋值,则可能面临不确定的数据状态和潜在的功能异常。 这种方法在单片机应用中常用于保存中断计数器、设备配置等关键信息,以保证复位后的系统行为一致性。然而对于需要高度可靠性的应用场景(例如金融或医疗设备),则建议考虑使用非易失性存储器如EEPROM来更安全地保存重要数据。 综上所述,在MDK环境下通过项目选项和代码修改相结合的方法可以实现特定变量在单片机复位时保持不变的目标,从而满足项目的特殊需求。
  • Vue使用iView的DatePicker
    优质
    本文将详细介绍如何在基于Vue.js的项目中使用iView框架的DatePicker组件,并设置其初始值。通过具体示例和代码演示,帮助开发者掌握DatePicker组件的基础用法及动态绑定日期数据的方法。适合前端开发人员参考学习。 在使用Vue进行前端开发时,经常会用到iView的UI控件,例如日期选择器就是一个常用的组件。官方文档提供了源码但没有提供设置默认值的具体代码示例,因此我们需要参考控件的相关说明来自行编写实现方法。本段落档旨在介绍如何在使用iView 的DatePicker组件时自定义设置所需的默认值。
  • Access外键关系
    优质
    本文介绍了如何在Microsoft Access数据库中设置外键关系的方法和步骤,帮助用户确保数据的一致性和完整性。 在Access中如何建立外键关系:首先创建Course表、Student表以及SC表,然后建立和删除这些数据表之间的关系。
  • antd Form表单为select的操作
    优质
    本教程详细介绍了如何在Ant Design框架下的Form组件中,为Select选择框设定默认选中的初始值的方法和步骤。 直接看代码吧: {getFieldDecorator(targetId, { initialValue: this.state.targetId, rules: [{ required: false, message: 作用对象 }] })(