打印
[经验分享]

单片机程序又跑飞?

[复制链接]
楼主: mikewalpole
手机看帖
扫描二维码
随时随地手机跟帖
21
ulystronglll| | 2024-11-9 22:20 | 只看该作者 回帖奖励 |倒序浏览
程序中使用了过多的递归调用或动态内存分配,导致堆栈空间耗尽。

使用特权

评论回复
22
pl202| | 2024-11-10 09:37 | 只看该作者
如果函数中存在递归调用,且递归深度没有合理控制,也会导致栈空间耗尽,程序出现异常。

使用特权

评论回复
23
everyrobin| | 2024-11-10 10:16 | 只看该作者
复位引脚如果受到外部干扰信号的影响,可能导致单片机意外复位或复位不完全,从而使程序出现跑飞现象。

使用特权

评论回复
24
phoenixwhite| | 2024-11-10 11:56 | 只看该作者
使用日志记录关键变量和程序状态,帮助定位问题。

使用特权

评论回复
25
sdlls| | 2024-11-10 12:29 | 只看该作者
单片机的电源稳定,使用适当的电源管理策略,如稳压器和滤波电容。

使用特权

评论回复
26
pl202| | 2024-11-10 12:56 | 只看该作者
使用单片机的调试工具(如JTAG、SWD等)进行在线调试,观察程序计数器PC的变化,确定程序跑飞的具体位置。

使用特权

评论回复
27
febgxu| | 2024-11-10 13:16 | 只看该作者
看门狗定时器可以在程序跑飞时自动复位单片机,使其恢复正常工作。

使用特权

评论回复
28
mattlincoln| | 2024-11-10 13:49 | 只看该作者
程序中使用了看门狗,但是没有及时“喂狗”,导致看门狗复位,使程序直接跳到复位位置。

使用特权

评论回复
29
iyoum| | 2024-11-10 14:31 | 只看该作者
尽量减少函数调用层级,减少局部变量,从而减少压栈时所需的空间。对于容量小的单片机,可以考虑将占用RAM大的局部变量改成全局变量。

使用特权

评论回复
30
juliestephen| | 2024-11-10 15:01 | 只看该作者
使用稳定的电源模块,添加滤波电容来减小电源纹波,在电源输入线上增加磁珠等滤波元件,抑制高频干扰信号。

使用特权

评论回复
31
vivilyly| | 2024-11-10 15:31 | 只看该作者
堆栈空间不足,导致正常数据被改写。

使用特权

评论回复
32
sdCAD| | 2024-11-10 17:10 | 只看该作者
中断服务例程(ISR)中存在死循环或长时间运行的代码,导致CPU无法响应其他中断或主程序的执行。

使用特权

评论回复
33
burgessmaggie| | 2024-11-10 17:54 | 只看该作者
避免越界访问数组和非法内存地址。

使用特权

评论回复
34
zerorobert| | 2024-11-10 18:52 | 只看该作者
对关键模块进行单元测试,确保其在各种条件下都能正常工作。

使用特权

评论回复
35
kkzz| | 2024-11-10 19:16 | 只看该作者
有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机。

使用特权

评论回复
36
hilahope| | 2024-11-10 19:48 | 只看该作者
程序中打开了某个中断,但是却没有相应的中断服务程序,导致在中断发生后,找不到中断服务程序入口,从而引发程序跑飞。

使用特权

评论回复
37
kmzuaz| | 2024-11-10 20:12 | 只看该作者
电源电压波动超出单片机允许的范围,可能导致单片机工作异常,程序跑飞。例如,电源电压的纹波过大,会使单片机内部的逻辑电平发生错误,进而影响程序的正常执行。

使用特权

评论回复
38
uptown| | 2024-11-10 20:32 | 只看该作者
在函数中定义了过多的局部变量,导致栈空间不足,当函数嵌套调用层数较深时,就容易发生堆栈溢出,使程序跑飞。

使用特权

评论回复
39
beacherblack| | 2024-11-10 21:06 | 只看该作者
仔细检查函数中调用的数组是否存在越界(溢出)的情况,确保数组的使用不超出其定义的范围。

使用特权

评论回复
40
updownq| | 2024-11-10 22:10 | 只看该作者
定期进行代码审查,确保代码质量。特别是对于关键路径和中断处理代码,要特别小心。

使用特权

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

本版积分规则