打印
[经验分享]

单片机程序又跑飞?

[复制链接]
3215|97
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mikewalpole|  楼主 | 2024-10-23 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1数组越界/溢出

现象:

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

原因:

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

解决方法:

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



2中断服务程序缺失

现象:

程序运行过程中总是跑飞。

原因:

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

解决方法:

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



3看门狗复位

现象:

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

原因:

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

解决方法:

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

使用特权

评论回复
沙发
gygp| | 2024-11-8 21:40 | 只看该作者
单片机程序跑飞是指程序执行偏离了正常的流程,进入了非法的内存区域或者进入了无限循环。

使用特权

评论回复
板凳
belindagraham| | 2024-11-8 21:51 | 只看该作者
在可疑的代码段设置断点,逐步跟踪程序执行流程。

使用特权

评论回复
地板
51xlf| | 2024-11-8 22:37 | 只看该作者
根据程序运行时间,尤其是一定要计算清楚最耗时的那段程序的运行时间,然后准确设置看门狗的复位时长,定时“喂狗”,尤其是在死循环中记得“喂狗”。

使用特权

评论回复
5
bestwell| | 2024-11-9 07:25 | 只看该作者
如果多个中断同时发生,而中断优先级设置不当,可能会导致高优先级中断不断打断低优先级中断的处理,使程序执行流程混乱,最终导致程序跑飞。

使用特权

评论回复
评论
sszxxm 2024-11-29 12:36 回复TA
只要堆栈空间足够,不应该出现程序混乱,每个中断进出,都应该执行进栈出栈的操作。 
6
lihuami| | 2024-11-9 07:58 | 只看该作者
程序中对指针的操作不当,导致访问了非法内存地址。

使用特权

评论回复
7
wilhelmina2| | 2024-11-9 08:20 | 只看该作者
是否打开了某个中断,但是没有响应和清除中断标志,导致程序一直进入中断,造成死机假象。

使用特权

评论回复
8
zerorobert| | 2024-11-9 09:56 | 只看该作者
程序中存在一个无限循环,导致CPU一直在执行这个循环,无法跳出。

使用特权

评论回复
9
pl202| | 2024-11-9 10:29 | 只看该作者
程序中的逻辑判断条件设置错误,导致程序执行了错误的分支,进而出现异常。

使用特权

评论回复
10
cemaj| | 2024-11-9 11:55 | 只看该作者
在使用指针变量时,如果指针超出了其所指向的数组或内存区域的边界,就会发生指针越界错误,可能会导致程序访问到非法的内存地址,从而使程序跑飞。

使用特权

评论回复
11
chenci2013| | 2024-11-9 12:24 | 只看该作者
程序中存在死循环,导致程序无法正常退出,表现为程序跑飞。例如,在循环条件***为真的情况下,程序会一直执行循环体中的代码,无法继续执行后续的程序。

使用特权

评论回复
12
cashrwood| | 2024-11-9 14:30 | 只看该作者
合理规划函数中的局部变量,避免定义过多不必要的局部变量。对于递归函数,要设置合理的递归终止条件,并优化递归算法,减少递归深度,防止堆栈溢出。

使用特权

评论回复
13
vivilyly| | 2024-11-9 16:25 | 只看该作者
代码中的逻辑错误。
中断服务程序(ISR)使用不当。

使用特权

评论回复
14
pixhw| | 2024-11-9 17:06 | 只看该作者
检查单片机及其外围电路是否有损坏。

使用特权

评论回复
15
yeates333| | 2024-11-9 17:47 | 只看该作者
解引用了一个未初始化的指针或越界访问数组。

使用特权

评论回复
16
beacherblack| | 2024-11-9 18:37 | 只看该作者
缓冲区的实际大小小于接收到的数据大小。

使用特权

评论回复
17
saservice| | 2024-11-9 19:01 | 只看该作者
单片机程序跑飞是一个复杂的问题,需要从多个方面进行排查和解决。

使用特权

评论回复
18
1988020566| | 2024-11-9 19:44 | 只看该作者
导致单片机无法正常工作,甚至出现死机现象。

使用特权

评论回复
19
ingramward| | 2024-11-9 21:10 | 只看该作者
所有指针在使用前都已正确初始化,避免使用野指针。

使用特权

评论回复
20
olivem55arlowe| | 2024-11-9 21:57 | 只看该作者
在使用指针时,要严格检查指针的合法性,确保指针的操作在合法的内存范围内。在动态分配内存后,要及时释放内存,并将指针置空,防止出现悬空指针。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

1458

帖子

0

粉丝