[开发资料] 单片机程序跑飞死机的几种原因

[复制链接]
1199|18
 楼主| 51xlf 发表于 2022-11-17 20:33 | 显示全部楼层 |阅读模式
在使用单片机过程中,经常会出现程序运行一段时间后,不能够正常相应的情况。一般分为软件原因和硬件原因,其中硬件原因比较容易查,软件原因就较为复杂。

软件导致单片机死机的原因
1、指针异常

指针未初始化或者野指针导致正常数据被篡改。如果程序区被修改,会导致程序直接跑飞;如果数据区被修改,会导致数据异常引起程序运行错误。

2、缓冲区溢出

实际接受的数据超过了缓冲区长度,导致后续正常数据被篡改。

或者操作数组的时候下标溢出

3、等待标志位

没有增加超时判断,正常情况下很快就能出来,但实际运行时标志位一直满足while条件,导致程序一直死循环等待标志位。处理方法是增加超时判断,超过一定时间主动报错退出。

4、堆栈溢出

常见于容量小的单片机,重复中断、函数调用导致超出堆栈空间,正常数据被改写。该问题最难查,有一定特殊性,很难稳定复现

5、中断异常

打开了某个中断但是没有编写中断响应函数导致进入fault,或者没有清除中断标志导致重复进入中断。

硬件导致单片机死机的原因
1、电源不稳定
主要表现为纹波过大、电压过高、过低
2、晶振失振
晶振电路设计有问题,导致温度变化后,晶振失振
3、外部干扰
外部干扰导致导线上电平变化,或者直接导致单片机内部模块运行异常。常见于一些干扰较为严重的场合,可通过电磁干扰性的实验复现。现象是在特定环境下容易出现,实验室条件下很难复现。


wilhelmina2 发表于 2022-12-1 19:36 | 显示全部楼层
常用防死机的方法是使用看门狗,好多单片机都内置了看门狗
caigang13 发表于 2022-12-1 19:43 来自手机 | 显示全部楼层
晶振出错,程序不叫跑飞了,是硬件宕机了。
uptown 发表于 2022-12-1 19:45 | 显示全部楼层
查看是否有干扰,电压是否稳定,晶振周围是否有干扰
dspmana 发表于 2022-12-1 21:06 | 显示全部楼层
很强的干扰脉冲,加上单片机的防干扰措施不到位,就是会被干扰破坏了正常的动行
sanfuzi 发表于 2022-12-1 21:59 | 显示全部楼层
死机通常是受干扰程序跑飞了。   
wangjiahao88 发表于 2022-12-2 09:56 | 显示全部楼层
单片机程序跑飞死机的几种原因

MARK!
iyoum 发表于 2022-12-6 14:50 | 显示全部楼层
可能是软件处理有问题               
Undshing 发表于 2022-12-26 12:20 | 显示全部楼层
程序受到干扰了吧
软核硬核 发表于 2022-12-27 09:45 | 显示全部楼层
那种一开始就运行不了的,跑飞原因不止以上几种。
Pretext 发表于 2022-12-27 09:46 | 显示全部楼层
有些用AC6编译的,程序也会跑飞。
天天向善 发表于 2022-12-27 09:47 | 显示全部楼层
能调试跑飞问题都好解决,电磁干扰跑飞问题,最难找了。
y1n9an 发表于 2022-12-28 14:20 | 显示全部楼层
程序跑飞的原因太多了,软硬件都有可能出问题的
suw12q 发表于 2022-12-28 15:26 | 显示全部楼层
一般情况都是受到外部干扰了,才会这样吧
su1yirg 发表于 2022-12-28 16:36 | 显示全部楼层
指针异常倒是也有可能会出现跑飞情况
tax2r6c 发表于 2022-12-28 17:34 | 显示全部楼层
其实看门狗没用好也会出现跑飞的
b5z1giu 发表于 2022-12-28 19:17 | 显示全部楼层
硬件不是很好查吧,受到干扰这种不好查的
ex7s4 发表于 2022-12-29 07:05 | 显示全部楼层
对,电源供应不稳的话,死机是常事儿,也还比较有规律的
g0d5xs 发表于 2022-12-29 08:11 | 显示全部楼层
其实主要分析一下程序死机是否是规律的,要是规律大概是软件的问题
lamanius 发表于 2022-12-29 10:21 | 显示全部楼层
等待标志位的话,这倒是逻辑上的事儿,逻辑没处理好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

551

主题

9997

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部