关于单片机死机的一些问题

发布者:Joyful888Life最新更新时间:2018-07-16 来源: eefocus关键字:单片机  死机 手机看文章 扫描二维码
随时随地手机看文章

最近的一个项目中测试系统的高低温实验,结果意外的发现经过高低温实验后(80℃到-20摄氏度)单片机有些已经死机了,所以不得不着手研究一下这个问题,在网上查阅资料后,基本上可以归结于以下几个问题:


1. 意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象

 

2. 中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。
 

 3. 地址溢出,常见错误为指针操作错误。我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。
  

4. 无条件的死循环;比如使用while(x);等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制;
  

5. 看门狗没有关闭。有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机,这个要看芯片手册,最好在程序复位后首先应该显式清除看门狗再关闭看门狗;

 

6. 堆栈溢出。最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。当你把以上几条都试过不能解决问题,试一试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定就可以了。

这个几个问题可以从代码编程风格上解决的大部分都能够解决,例如外部中断或者全局变量,还有一些事在中断函数中的递归比较繁琐。

如果在注意编程风格的前提下不能解决当前的问题,那么就要注意使用单片机自带的寄存器来监察异常状况。

在atmega8这款单片机中的MCUCSR寄存器来监察当前情况

MCU 控制和状态寄存器-
MCUCSR
MCU 控制和状态寄存器提供了有关引起MCU 复位的复位源的信息。
• Bit 7..4 – Res: 保留
这几位保留,读操作始终为"0”。
• Bit 3 – WDRF: 看门狗复位标志
看门狗复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。
• Bit 2 – BORF: 掉电检测复位标志
掉电检测复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。
• Bit 1 – EXTRF: 外部复位标志
外部复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。
• Bit 0 – PORF: 上电复位标志
上电复位发生时置位。只能通过写”0” 来清除。
为了使用这些复位标志来识别复位条件,用户应该尽早读取此寄存器的数据,然后将其复位。如果在其他复位发生之前将此寄存器复位,则后续复位源可以通过检查复位标志来了解。

在目前的项目工作中,经过排查我们发现了主要原因是,当主程序死机时定时器却还在不停的计数,于是导致看门狗不能复位,所以导致了程序跑死的结果。

代码中我们可以这样进行改进:

主程序中我们可以声明一个变量看门狗的复位标志,然后在中断中进行判断:bit wdtflag=0;

在主程序中对其进行赋值:

void main(void)

{

while(1)

{

  bit wdtflag=1;//每次进入while循环的时候将其置位

}

}

中断程序中进行判断

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{

    if(wdtflag) //防止主程序死机而中断不死机
    {   
        wdtflag=0;
        #asm("wdr")   
    }   
}

这样就可以和主程序中的看门狗进行一个联系,防止主程序已经跑飞但是在中断函数中却不能复位的问题。


关键字:单片机  死机 引用地址:关于单片机死机的一些问题

上一篇:标志寄存器及其标志位
下一篇:I2C通用读写函数

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

从LCD电极读数的单片机接口技术
   摘要 以测量仪表中常见的时分割驱动法驱动的段式LCD显示器为例,分析LCD显示器的电极连接结构和驱动信号波形;介绍单片机读取仪表LCD读数的接口电路。此接口电路应用于笔者开发的自动血压监控仪的研制及临床应用项目中,由8031单片机读取血压计的收缩压、舒张压、心率以及充气和放气时瞬时压强。实验证明,此接口电路工作稳定、可靠。   通过测量仪表拾取被测信号是单片机前向通道设计中常用的数据采集方式。通常,接口电路从仪表电路中取得相关的模拟信号,经过A/D转换或V/F 转换送入单片机;或者取得一个频率信号,经整形后送入单片机 。然而,有些测量仪表电路中可能找不到这样的信号。以电容式压力传感器血压计为例,尽管从其振荡电路中可以取得一
[单片机]
单片机分时思想
下面说的单片机应用也主要是家电控制方面,也就是现在的工作。其它应用不在讨论范围。才识有限,也敬请前辈们勘误,指教。 先用一个小例子引出今天的主题,想象一下,一个基本的家电控制板,肯定或多或少的会包含 : LED 或者 数码管显示, 按键, 继电器或者可控硅的输出 这3部分。数码管需要 10ms到20ms的动态扫描,按键也需要 20ms左右的延时消抖,有没有意识到,其实这些时间是同时在进行的。回想一下咱们的教科书怎么教 按键 的延时消抖的?没错,死循环,绝对是原地踏步死循环,用指令来计时。这样很自然的引发一个问题,单片机在原地踏步死循环的话,那么其它的工作怎么办?如数码管的动态扫描怎么办?唯有等按键扫描之后再进行了,这样出来的效果
[单片机]
针对常用51单片机下载程序问题做下详解
目前为止,接触单片机已有不少,从选择元器件、原理图、PCB、电路硬件调试、软件开发也算小有心得。 单片机软件开发里面第一步当属下载程序了,如果这一步都有问题,那么后面的一切便无从谈起,记得当初刚接触单片机时,对于下载电路方法及原理也是一头雾水。好在随着经验的积累以及自己的努力探求,现在对此问题算是有了点点自己的经验理解。故今天在此针对常用51单片机下载程序问题做下详解,以求新手们少走弯路。 原理 单片机的TXD、RXD是TTL电平,所以你得万变不离其宗的将其它信号转成TTL电平,只有这样给单片机下载程序才有可能成功!其中CH340、PL2303等芯片是直接将USB信号转换为TTL电平,而MAX232等芯片是将TTL转换为R
[单片机]
针对常用51<font color='red'>单片机</font>下载程序问题做下详解
单片机编程心得
一、延时程序的处理: 1、对于可以设置系统时钟的单片机,延时程序统一先把系统时钟设频率置为最低,然后按这个最低时钟频率写延时 函数,这样的好处:第一,统一了不同系统时钟下的延时;第二,降低功耗 2、对于单片机系统,不同的外部时钟,延时程序对应的时间不同,为了方便使用,加入预编译指令#ifdef/#else/ #endif 这样如果预定义了一个系统时钟,则选择相应的延时参数进行编译,而延时程序主体不变,只是里面有 一个延时参数,根据预定义选择相应参数。 二、for循环的处理: 用for(i=XX,i 0,i--) 而不用for(i=0;i XX,i++) 速度快 对于两层或多层for循环,频繁的循环放在
[单片机]
单片机开发产品中的注意难点
如何提高电子产品的抗干扰能力和电磁兼容性 div g_c_pdin= g_p_center= c07= content = 在研制带处理器的电子产品时,如何提高抗干扰能力和电磁兼容性? 1、 下面的一些系统要特别注意抗电磁干扰: (1) 微控制器时钟频率特别高,总线周期特别快的系统。 (2) 系统含有大功率,大电流驱动电路,如产生火花的继电器,大电流开关等。 (3) 含微弱模拟信号电路以及高精度A/D变换电路的系统。 2、 为增加系统的抗电磁干扰能力采取如下措施: (1) 选用频率低的微控制器: 选用外时钟频率低的微控制器可以有效降低噪声和提高系统的抗干扰能力。同样频率的方波和正弦波,方波中的高频成
[单片机]
单片机在直流变频洗衣机中的应用
1 引言 洗衣机是一种在家庭中不可缺少的家用电器,发展非常快,全自动式洗衣机因使用方便得到大家的青睐,全自动即进水、洗涤、漂洗、摔干等一系列过程自动完成,控制器通常设有几种洗涤程序,对不同的衣物可供用户选择。变频控制依其高性能、节能等优点在洗衣机的控制中得到广泛应用,下面介绍采用凌阳科技公司的SPMC75F2413A和SPCE061A单片机来设计的直流变频洗衣机的控制系统。 2 系统总体方案介绍 整个系统主要由两部分组成:由SPMC75F2413A控制的DMC控制板和由SPCE061A控制的PANEL板,两者之间的连接系统方块图如图2.1所示。 点击看原图
[单片机]
<font color='red'>单片机</font>在直流变频洗衣机中的应用
自主车载网络面临的困境和解决途径
随着电子技术、信息技术在汽车中的融合,以燃油电子喷射、电子防抱死刹车系统(ABS)、电子制动力分配系统(EBD)、电控转向助力系统(EPS)、自动变速器、电子行驶稳定系统(EPS)......等集机械、电气和电子一体为代表的现代汽车技术由价格高昂的高级轿车应用逐渐渗透到面向百姓的家庭轿车之中,与这些技术密切相关的车载网络也随之进入家庭轿车之中。据作者统计,近两年在中国下线,售价在6~20万之间的轿车中都能发现车载网络的综影。图1是上海大众汽车有限公司2002年推出的POLO轿车上车载网络拓扑结构。 图1中,POLO轿车中两条独立车载网络实现了整车信息的共享,一条车载网络服务于动力系统,它将发动机控制、自动变速箱
[单片机]
自主车载网络面临的困境和解决途径
基于单片机和PWM控制方法调速实现无刷控制器检测设计
引言 伴随着城市化进程,人们生活的交通距离不断扩大,代替燃油汽车和自行车的电动车的普及大幅度的提高了电力资源的利用效率,促进了国民经济的健康发展。电动自行车以电力作动力,骑行中不产生污染,无损于空气质量。从改善人们的出行方式、保护环境和经济条件许可情况等因素综合来看,电动自行车目前乃至今后都有着广阔的发展空间。电动自行车所用直流电机分为有刷电机和无刷电机两种。其中有刷电机控制较简单。但其易磨损的电刷带来维修保养工作量相对较大、使用寿命相对较短等缺点。而直流无刷电机本身没有易磨损部件,电机寿命长,维修保养工作量小。但直流无刷电机采用电子换向原理工作,其控制过程比有刷电机复杂得多,因此对控制器质量的要求也高得多。 目前电动自行车采
[单片机]
基于<font color='red'>单片机</font>和PWM控制方法调速实现无刷控制器检测设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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