vivilyly 发表于 2025-3-29 16:38

单片机程序跑飞的原因

数组越界/溢出
现象

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

原因

数组越界(数组溢出),函数中定义的数组元素的个数小于程序中实际使用的数组元素的个数,例如在函数中定义了一个数组ucDataBuff,这个数组只有10个元素,但是在函数中却有这样的语句

ucDataBuff = 0x1a
这个语句是给数组的第11个元素赋值,由于定义的数组只有10个元素,从而导致赋值语句中不知道把 0x1a 放到什么地方,从而导致程序跑飞。

解决方法

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

中断服务程序缺失
现象

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

原因

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

解决方法

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

看门狗复位
现象

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

原因

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

解决方法

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

pentruman 发表于 2025-4-4 11:27

电压波动、噪声干扰导致单片机内部逻辑电平混乱。

ccook11 发表于 2025-4-4 11:41

电源稳定,加入足够的滤波电容和稳压电路;选用可靠的时钟源,并合理设计时钟电路;采取屏蔽和隔离措施,减少外部干扰。

bestwell 发表于 2025-4-4 13:12

指针操作错误或数组下标越界,导致意外修改系统寄存器。
页: [1]
查看完整版本: 单片机程序跑飞的原因