MDK下怎样才能让变量在复位时不被初始化

发布者:SparklingDreams最新更新时间:2016-07-15 来源: eefocus关键字:MDK  变量  复位  初始化 手机看文章 扫描二维码
随时随地手机看文章
       最近一个项目需要保存一下临时数据,而产品容易受干扰而复位。所以需要保存一下数据,那么只有在系统复位时候不再初始化变量即可。对应MDK(keil)来说是一个比较麻烦的问题。通过网络上找了大量资料和测试发现终于可以了。

       如果要实现以上要求,必须设置两点,缺一不可:

1. 在MDK的选项中设置如下:

MDK下怎样才能让变量在复位时不被初始化 - 我心永恒 - ARM-新的梦想

 

2. 必须在程序代码中如下编写:

#define __noinit__ __attribute__((zero_init))   // 变量不初始化为0
__noinit__  int  tmp;                                              // 变量前加上宏__noinit__ 

当然也可以直接:

__attribute__((zero_init))    int  tmp; 

说明:__noinit__ 不是mdk的关键字

 

当然也可以直接把启动代码中的__main()改成main(),也可以达到相同的目的,但是不知道有没有什么不好的影响。

关键字:MDK  变量  复位  初始化 引用地址:MDK下怎样才能让变量在复位时不被初始化

上一篇:1个定时器多处复用的问题
下一篇:使用LPC2148GPIO的注意事项

推荐阅读最新更新时间:2024-03-16 15:00

keil5 MDK软件中传统C51与STM32相互兼容的方法
之前单片机刚入门开始学89C51,开发环境为keil4,后来升级到keil5,现在准备学STM32,STM32开发环境为keilMDK,于是找到keilMDK安装包下载之后,才发现他和Atmel、STC的单片机不兼容,于是在百度中寻求让他们兼容的方法,有人说什么更改TOOL文件里的东西,本人尝试了一下也没成功。最近又看到一种方法,十分简单,亲测已经成功完成兼容。于是将此方法写在这里。 1、首先准备普通keil的版本(即C51的,不是MDK版本的),然后按照安装步骤进行安装激活(安装并且进行注册机注册),安装路径任意,但是要记住这个安装路径,因为下一步要用到。 2、第二步进行keilMDK的安装。这是关键性的一步,这一次选择的安
[单片机]
keil5 <font color='red'>MDK</font>软件中传统C51与STM32相互兼容的方法
变量
上课所提到变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下: 数据类型 变量名表 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。这些存储种类的具体含义和用法,将在第七课《变量的存储》中进一步进行学习。 而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储
[单片机]
STM32学习笔记(1) GPIO初始化及点亮LED
一、led.h头文件分析 #ifndef __LED_H #define __LED_H #include sys.h #define LED0 PAout(8) // PA8 #define LED1 PDout(2) // PD2 void LED_Init(void);//初始化 #endif 问:ifndef,endif有什么用? 在这一段代码中,假设同时有A.h和B.h同时包含了这个头文件,在编译器编译A时,会先判断LED.H有没有被定义(这里肯定是未被定义的),那么就定义(define __LED_H),然后再(endif),在编译器编译B时,同样会判断LED.H有没有被定义(这里经过A的编译,肯定是被定义的),那么
[单片机]
STM32学习笔记(1) GPIO<font color='red'>初始化</font>及点亮LED
STM32F4学习笔记2——时钟与复位系统
STM32F4采用了三种不同的时钟用来驱动系统时钟(SYSCLK) ·HSI振荡器时钟(内部时钟) ·HSE振荡器时钟(外部时钟) ·PLL时钟(锁相环时钟) 这些设备有以下两种二级时钟源 ·32kHz低速内部RC,可用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/待机模式下自动唤醒系统。 ·32.768kHz低速外部晶振也可以用来通过程序选择驱动RTC(RTCCLK)。 AHB总线最高支持168MHz的时钟,通过AHB总线分频APB2最高支持84MHz,APB1最高支持42MHz。 所有外设驱动全部来至于SYSCLK除了下面几个: ·USB OTG FS时钟48MHz,随机信
[单片机]
MDK 工程宏定义的应用
这个宏定义是指工程的Options窗口--“C/C++”--“Preprocerssor Symbols”下的宏定义。 在这里宏定义了可以让编译器选择性的编译某些代码。如: #if defined(LCD_MODEL_AT043) #define C_GLCD_H_PULSE 41 #define C_GLCD_H_FRONT_PORCH 10 #define C_GLCD_H_BACK_PORCH 10 #define C_GLCD_V_PULSE 10 #define C_GLCD_V_FRONT_PORCH 2 #define C_GLCD_V_BACK_POR
[单片机]
<font color='red'>MDK</font> 工程宏定义的应用
如何用Keil来验证单片机变量占多少字节
首先问大家两个问题: 8位单片机定义一个int型变量,占几个字节? 32位单片机定义一个char型变量,占几个字节? 我敢说很多人都不知道,或者存在疑惑。具体占多少字节,其实通过手动验证一下就知道了。 今天结合Keil C51(AT89C51),以及Keil MDK(STM32)为大家验证一下 char、short、int、float、double 到底占几字节空间。 Keil C51、8位单片机 这一节基于Keil C51工具,8位单片机(AT89C51)进行测试。 //char a; void main(void) { while(1) { } } 这是一个很简单的Demo,只针对变量占用空间大小进行测试,主要是
[单片机]
KEIL / MDK生成BIN文件
使用相对路径生成,不需要任何修改 $KARMARMCCbinfromelf.exe --bin --output=@L.bin !L 编译后,Build Out框可以看到: After Build - User command #1: D:Program FilesMDK516ARMARMCCbinfromelf.exe --bin --output=test1.bin .objtest1.axf 上述操作后,在xxx.uvprojx当前目录下,可看到一个test1.bin
[单片机]
单片机C环境下位操作的实现方法
  C语言既有高级语言的各种特点,又可对硬件进行操作,并对进行结构化程序设计,用C语言编写的程序较容易移植,它们可生成简洁可靠的目标代码,在代码效率和代码执行速度上完全可以和汇编媲美。采用C语言进行单片机编程是嵌入式程序设计的发展趋势。但是,在嵌入式控制等领域,经常需要控制某一个二进制位,然而除了Keil C51等C环境外,很多单片机C环境都没有扩充对位变量定义的关键字,甚至单片机本身的硬件上也没有对单个位操作的汇编指令,这使得已习惯MCS-51内核单片机Keil C51编程的用户都为其C环境不能对位变量进行位操作而烦恼。 1 用“读-修改-写”方法实现对单个位的位操作 ANSIC中,一般采用“读-修改-写”的方法实现单个
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved