产品概述

单片机程序跑飞 单片机程序跑飞的三种现象,原因及解决方法

小编 2024-11-23 产品概述 23 0

单片机程序跑飞的三种现象、原因及解决方法

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

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

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

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

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

二、中断服务程序缺失

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

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

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

三:看门狗复位

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

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

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

单片机程序死机跑飞原因分析

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

配图与内容无关

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

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

配图与内容无关

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

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

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

配图与内容无关

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

相关问答

51 单片机程序跑飞 什么意思?怎么解决?

程序跑飞就是程序执行错误,程序不知道运行到哪里,这就需要设定标志位,寻找跑飞的地方,再改程序跑飞就是程序执行错误,程序不知道运行到哪里,这就需要设定标志...

单片机跑程序 是什么意思?

程序本来是按设定运行的,如你编的程序在存储器中的地址是0-1000,由于某种原因(干扰或程序漏洞),程序运行在了1000之后的区域,就是程序“跑飞”这里面...

单片机 在执行完 程序 后是停止还是再从头开始执行?

如果没有循环,单片机在执行完程序后就不再执行程序了。(当然,这是指正常情况。因为单片机可能会出现程序“跑飞”的情况。)如果没有循环,单片机在执行完程序...

单片机程序 里看门狗程序重要吗?

重要。看门狗(WDT)是一个定时器。看门狗是用来防止万一单片机程序出错造成重大损失的。防错的原理很简单,它在硬件上就是一个定时器,当它溢出的时候就会让单片...

单片机 系统输入和输出电路工作原理-ZOL问答

单片机输入:晶振提供时钟同步复位电路:系统复位,外置自动复位电路:程序跑飞时自动复位。继续运行。电源:系统供电这是组成最小系统的基本电路。输出电路:...

单片机 不能开机了,断开电池再加上电池后又能开机了,这是什么原因?

应"悟空小秘书"邀答!单片机不能开机了,断开电池再加上电池后又能开机了,这是什么原因?现在的高科技就高在集成芯片,题主人指的单片机,就是里面装有数据...应"...

会怎么处理呢?软件“看门狗”技术若失控的 程序 进入“死循环”?

一,不是所有的单片机都有内置看门狗,就好比不是所有家庭都养狗一样。比如AT89C51没带看门狗,AT89S51有带看门狗,STC单片机一般都带看门狗。二,看门狗是用...

我要用一块51 单片机 接超声波探头自己搭了一块板子,接上了复...

[最佳回答]我以前也做过.对于超声波探头那4个脚,布线时是很纠结的.如果用单面板,飞线在所难免;双面板回少飞一点.我以前也做过.对于超声波探头那4个脚,布线时...

单片机 软件设计应该考虑哪些事情?

免用户误会,应准...3.需要显示时,做到显示明确,避免用户误会,应准确显示出系统状态,出现故障时应及时提示和报警。4.在软件编写时,做到模块化,层次清晰,结...

直升 机的螺旋桨在顶上,为什么能往前飞?

其实直升机主要不是靠提高旋翼转速来实现上升下降的,而是通过调节旋翼叶片的迎风角度来实现升力调节的。直升机的前进后退和侧飞都是通过调节整个旋翼回转面...

猜你喜欢