打印
[牛人杂谈]

单片机死机问题解决方案

[复制链接]
1407|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
李浩一|  楼主 | 2022-1-25 13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做了一个项目  ,发现程序时不时的会重启 (加了看门狗),不加偶尔也会死机导致程序出现问题,

查找资料    有以下的几种原因
1.堆栈溢出;
2.电源干扰;
3.强电和弱电共地干扰;

由于自己使用了串口
整个程序一直的再接收数据


可能数据一直在中断里面有没出来,或者数组越界了,不过前面那种可能性大一点,

1.意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象
2. 中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volaTIle,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。
3. 地址溢出,常见错误为指针操作错误。我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。
4. 无条件的死循环;比如使用while(x);等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制;
5. 看门狗没有关闭。有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机,这个要看芯片手册,最好在程序复位后首先应该显式清除看门狗再关闭看门狗;
6. 堆栈溢出。最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。当你把以上几条都试过不能解决问题,试一试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定就可以了。

最后也有可能是硬件的问题,给大家一个解决问题的思路



使用特权

评论回复
沙发
sparrow054| | 2022-1-26 10:41 | 只看该作者
感觉卡死的问题,很难查找,每次都要一天来的

使用特权

评论回复
板凳
海滨消消| | 2022-1-26 10:58 | 只看该作者
感谢楼主提供的解决问题的思路

使用特权

评论回复
地板
match007| | 2022-1-27 17:11 | 只看该作者
的确,有的时候,需要的是一些解决问题的思路
很多人一遇到问题,脑子就是空白

使用特权

评论回复
5
内政奇才| | 2022-2-14 16:50 | 只看该作者
这些思路可以

使用特权

评论回复
6
chenjun89| | 2022-2-14 18:35 | 只看该作者
楼主提供的思路有参考意义

使用特权

评论回复
7
dongnanxibei| | 2022-2-14 21:04 | 只看该作者
是什么导致重启的,你要搞清楚啊。

使用特权

评论回复
8
dongnanxibei| | 2022-2-14 21:07 | 只看该作者
如果是看门狗超时,那可能是程序设计不科学导致的,比如某个执行函数等待超时,导致了没法喂狗。

使用特权

评论回复
9
Charlotte夏| | 2022-2-21 15:01 | 只看该作者
看单片机怎么死机的,很大一部分都是程序跑飞导致的

使用特权

评论回复
10
B1lanche| | 2022-2-21 15:20 | 只看该作者
这个时不时的,有可能是外部干扰吧,电压不够都有可能

使用特权

评论回复
11
Alina艾| | 2022-2-21 15:31 | 只看该作者
看你硬件设计呗,是不是硬件有问题啊

使用特权

评论回复
12
Charlene沙| | 2022-2-21 15:52 | 只看该作者
你可以做个程序写log的测试代码,这样能好一些

使用特权

评论回复
13
Carina卡| | 2022-2-21 16:02 | 只看该作者
之前我遇到过,电压不稳导致我的设备总是重启,而且还不规律

使用特权

评论回复
14
alxd| | 2022-2-21 16:21 | 只看该作者
重启,很大一部分是电源问题,可以先测测电源方面

使用特权

评论回复
15
Belle1257| | 2022-2-21 16:38 | 只看该作者
程序也能导致设备重启的,比如收到的数据不对,导致一直等待之类的

使用特权

评论回复
16
Betty996| | 2022-2-21 16:55 | 只看该作者
一般是少用中断,少用循环,这样能好一些

使用特权

评论回复
17
Emily999| | 2022-2-21 17:17 | 只看该作者
考虑一下硬件设计,如果硬件设计没问题,再看代码逻辑

使用特权

评论回复
18
Estelle1999| | 2022-2-21 17:33 | 只看该作者
所以说,写个代码,逻辑非常重要,不然重启都是家常便饭啦

使用特权

评论回复
19
kiwis66| | 2022-2-22 10:28 | 只看该作者
bug无处不在

使用特权

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

本版积分规则

43

主题

47

帖子

1

粉丝