单片机跑飞现象是指程序计数器(PC)的值出乎咱们所需求的,产生了反常的偏移,脱离了本来设定好的程序要履行的方位,进入原定程序以外的区域,例如:程序的空白区、程序以外的空间或许是某种死循环中,使指令的地址码和操作码产生改动,而PC把操作码当作指令来履行,操作码改动就代表着将履行过错的指令;或许PC的值指向一个不符合逻辑关系的指令或非程序的区域,会形成运转成果进入死循环,即常说的“死机”。跑飞有以下几种可能的原因:
1、 数组越界/溢出
现象:程序在函数中运行时,总是在运行到函数末尾,要跳出函数时,程序跑飞。
解决方法:如果在调试程序时,发现程序总是在函数执行完毕时跑飞,多数情况是发生了数组越界(数组溢出)的错误,仔细检查函数中调用的数组是否存在越界(溢出)的情况。
2 、中断服务程序缺失
现象:程序运行过程中总是跑飞。
原因:程序中打开了某个中断,但是却没有相应的中断服务程序,从而导致在中断发生后,找不到中断服务程序入口,从而导致程序跑飞。
解决方法:检查程序中是否存在打开了某个中断,但是没有相对应的中断服务程序。
3、 看门狗复位
现象:在执行一段较为耗费时间的程序时,程序跑飞,并且总是跳到复位位置处。
原因:程序中使用了看门狗,但是没有及时“喂狗”,从而导致看门狗复位,使程序直接跳到复位位置。
解决方法:根据程序运行时间,尤其是一定要计算清楚最耗时的那段程序的运行时间,然后准确设置看门狗的复位时长,定时“喂狗”,尤其是如果有死循环的情况,一定要在死循环中记得“喂狗”。
|