历史上的今天
返回首页

历史上的今天

今天是:2024年12月25日(星期三)

正在发生

2019年12月25日 | 单片机程序死机跑飞查找原因

2019-12-25 来源:eefocus

单片机程序死机,跑飞了可以从以下几个方面查找原因:


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


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


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


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


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


6. 堆栈溢出。最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。当你把以上几条都试过不能解决问题,试一

试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定就可以了。


今天在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此总结了单片机程序跑飞的三种现象、原因及解决方法。


一、数组越界(数组溢出)

现象:单片机程序在函数中运行时,总是在运行到函数末尾,要跳出函数时,程序跑飞。

原因:数组越界(数组溢出),函数中定义的数组元素的个数小于程序中实际使用的数组元素的个数,例如在函数中定义了一个数组ucDataBuff[10],这个数组只有10个元素,但是在函数中却有这样的语句ucDataBuff[10]=0x1a,这个语句是给数组的第11个元素赋值,:由于定义的数组只有10个元素,从而导致赋值语句中不知道把0x1a放到什么地方,从而导致程序跑飞。


解决方法:如果在调试程序时,发现程序总是在函数执行完毕时跑飞,多数情况是发生了数组越界(数组溢出)的错误,仔细检查函数中调用的数组是否存在越界(溢出)的情况。


二、中断服务程序缺失

现象:程序运行过程中总是跑飞。

原因:程序中打开了某个中断,但是却没有相应的中断服务程序,从而导致在中断发生后,找不到中断服务程序入口,从而导致程序跑飞。


解决方法:检查程序中是否存在打开了某个中断,但是没有相对应的中断服务程序。


三:看门狗复位

现象:在执行一段较为好费时间的程序时,程序跑飞,并且总是跳到复位位置处。

原因:程序中使用了看门狗,但是没有及时“喂狗”,从而导致看门狗复位,使程序直接跳到复位位置。

解决方法:根据程序运行时间,尤其是一定要计算清楚最耗时的那段程序的运行时间,然后准确设置看门狗的复位时长,定时“喂狗”,尤其是如果有死循环的情况,一定要在死

循环中记得“喂狗”。


四:启用了中断,就一定要设置中断函数,并要关闭中断标志。


五:乱用指针也可能造成这种


推荐阅读

史海拾趣

BAND-IT公司的发展小趣事

随着电子技术在深海钻探领域的应用不断加深,对紧固件的耐腐蚀性和可靠性提出了更高要求。1947年,克尔麦吉石油工业公司完成了历史性的32号船浅滩区油井钻探,该油井远离陆地,需要在恶劣的盐水环境中运输石油。BAND-IT公司凭借其卓越的不锈钢紧固件产品,成功满足了这一特殊需求。其不锈钢扎带和扎扣能够在高盐度、高湿度的环境下保持稳定的性能,为深海钻探的顺利进行提供了有力保障。

Atmel (Microchip)公司的发展小趣事

为了进一步扩大市场份额和拓展应用领域,Atmel(Microchip)积极与其他企业开展合作。公司与多家知名企业建立了战略合作关系,共同推动微控制器及相关技术在各个领域的应用。通过与合作伙伴的紧密合作,Atmel的产品已经广泛应用于工业、消费、安全、通信、计算和汽车等多个领域,为这些领域的发展提供了强有力的支持。

这五个故事旨在展现Atmel(Microchip)在电子行业中的发展历程和成就,涵盖了从创业初期到被收购后的不同阶段。通过这些故事,我们可以看到Atmel(Microchip)如何凭借技术创新、市场拓展和合作发展,逐渐成为了微控制器领域的领军企业。

General Diode Corp公司的发展小趣事
无电流输出或电流输出不稳定。
Astron Wireless Technologies Inc公司的发展小趣事

随着公司的发展,Astron Wireless Technologies Inc开始寻求与其他行业的领军企业建立战略合作关系。通过与一家知名通信设备制造商的合作,公司成功将其无线通信技术集成到了对方的产品中,从而进一步扩大了市场份额。这一合作不仅提升了公司的知名度,还为公司带来了稳定的收入来源。

Altech公司的发展小趣事

凭借在铝合金导体领域的卓越成就和持续创新,Altech公司成功获得了国家级高新技术企业的认定。这一荣誉不仅是对公司技术实力和创新能力的肯定,也为公司未来的发展提供了有力的支持。作为国家级高新技术企业,Altech公司将继续加大研发投入,推动技术创新,为电子行业的发展做出更大的贡献。

Austek Microsystems公司的发展小趣事

Austek Microsystems成立之初,便以研发创新为核心驱动力。面对竞争激烈的市场环境,公司团队凭借深厚的技术积累,成功开发出了一款具有高性能和低功耗特点的微控制器芯片。这款芯片不仅满足了当时市场对高效能计算的需求,也为Austek Microsystems在电子行业中赢得了初步的市场认可。

问答坊 | AI 解惑

缓冲区溢出光速入门

缓冲区溢出光速入门,你可以看看…

查看全部问答>

不可思议的木头钟

这款木头做的钟就像一款有花纹的笔记本电脑,但是这个时尚的新款木钟却是我见过的最引人注目的时钟。是没有显示的情况下,你可能会觉得这是从某个倒霉的椅子上拔下来的一只脚。但就算打开了,你还是觉得这是块木头,只是它的纹路上神秘又漂亮的显示 ...…

查看全部问答>

如何知道通讯录被修改过?

我发的贴,如下 http://topic.eeworld.net/u/20100528/13/fc32eafe-a232-45de-aff6-eaa81c5d2bc5.html?97042…

查看全部问答>

AD598芯片的各引脚功能告诉我吗?

有谁可以帮我讲解一下AD598各引脚的作用,以及怎样设计AD598的外围元件,急!!!!!!!!! 我的QQ:283970042 多谢各位大师啊…

查看全部问答>

白光LED现状及LED使用过程中的损失分析

 LED被称为第四代照明光源或绿色光源,具有节能、环保、寿命长、体积小等特点,可以广泛应用于各种指示、显示、装饰、背光源、普通照明和城市夜景等领域。近年来,世界上一些经济发达国家围绕LED的研制展开了激烈的技术竞赛。   出光率决定LED ...…

查看全部问答>

modelsim仿真编译时,报错

`timescale 100ns/10ns  说时间精度 syntax error  unexpected “base”,expecting“class”请问是怎么回事啊 急问啊??????…

查看全部问答>

武汉:招聘硬件电路设计工程师及FPGA设计工程师

武汉某位于光谷电子公司,发展前景颇大,目前公司规模约90人,诚恳招纳有意在武汉工作的贤才志士。请有意者将个人最新简历发至terrac@126.com注:因公司政策及行业性质,且薪资范围已明确,不便透露公司名称。感兴趣者我可私信或邮件告知公司相关情 ...…

查看全部问答>

扩频通信系统的fpga设计 郭黎利

谁有郭黎利版的  《扩频通信系统的fpga设计》 一书里的代码?  这本书应该来说是还可以的,特别是里面原理的讲解比较好,但是里面的代码错的有点多,应该都是在排版的时候把代码改动了,好多低级的错误,有点没法忍。。。不知 ...…

查看全部问答>

两个路由节点的网络地址相同是怎么回事?

今天下午在测试一个程序的时候,发现有两个路由节点的网络地址相同,不知道是什么原因,求大神解答,非常感谢!…

查看全部问答>

【STM32F7英雄联盟大赛】多功能串口侦测工具---界面设计

        在应用STemWin设计GUI时,可以先用GUIBuilder.exe软件设计界面,其使用非常简单,完全后PC中的VB等软件的使用很类似,点击控件添加在窗体上,可以对窗体的一些属性进行设置,不过,不能对控件的全部属性进行 ...…

查看全部问答>