打印
[单片机资料]

[转] 单片机程序跑飞的几种原因

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

使用特权

评论回复

相关帖子

沙发
ayb_ice| | 2022-12-2 09:39 | 只看该作者
指针乱指,不合适的强制转换,数组越界是主要原因.

使用特权

评论回复
评论
王栋春 2022-12-2 10:19 回复TA
谢谢坛友赐教,俺对这方面的知识不太熟悉,看网上这个资料不错便转发一下。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3041

主题

22807

帖子

67

粉丝