当前位置: 首页 > news >正文

程序跑着跑着就死机,看门狗加了也没用,复位按钮倒是能恢复?

有些嵌入式问题挺磨人:设备上电后能跑,通信也正常,放一会儿突然没反应。按复位键,马上又活了。你给它加了看门狗,心里想着“这下总能兜底”,结果现场还是卡住。更尴尬的是,复位按钮有效,看门狗却像没看见。

这种现象我一般不急着把锅甩给某一行代码。按我的经验,它更像一个信号:系统没彻底掉电,也不一定进了普通死循环,而是卡在了看门狗看不准的位置。

先确认:复位到底是谁触发的

第一件事不是改程序,而是读复位标志。MCU 通常会留下 POR、BOR、外部复位、软件复位、WDT 复位等痕迹。上电后立刻把这些标志打印出来,或者存到一小段备份寄存器/Flash 日志里,再清除标志。

如果现场卡死后按下复位键,日志只显示外部复位,那看门狗可能根本没咬到。常见原因是喂狗位置放错、低功耗暂停了 WDT、时钟源异常,或者程序卡在总线等待里,但仍有某个地方在机械喂狗。

图:程序假死时,不要只盯着主循环,先把复位来源和死前现场留住。

看门狗没用,常见是“喂得太勤”

不少项目喜欢在主循环末尾喂狗。这个写法看起来规矩,其实有风险。某个任务已经卡住,主循环还在空转;通信线程锁死了,定时中断还在喂狗。系统对外已经不可用,看门狗却觉得“一切正常”。

更稳一点的做法,是让关键任务各自上报心跳。只有采样、通信、控制、存储这些关键链路都按时更新状态,才允许统一喂狗。这样看门狗盯的不是 CPU 是否还在跑,而是业务链路是否还活着

复位能恢复,硬件边界也要查

复位按钮能恢复,常常说明外设状态被重新初始化了。I2C 从机拉低 SDA、SPI 忙标志不释放、传感器电源毛刺后进入异常状态,都可能让 MCU 在驱动层等不到返回。

供电也别跳过。电机启动、无线发射、继电器吸合时,3.3V 可能短暂下陷。电压没低到让 MCU 完整复位,却足够让外设状态乱掉。示波器抓一下 3.3V、复位脚、外设电源,比盯着代码猜更省时间。

我会按这几步落地

1. 保存复位来源。每次启动先记录复位标志,别让线索一上电就丢。

2. 加死前心跳。用 GPIO、环形日志或低成本串口,把主循环、关键任务、中断频率分开观察。

3. 改喂狗策略。别让单点喂狗代表系统健康,关键模块都报平安后再喂。

4. 给外设等待加超时。所有 while 等待寄存器标志的位置,都应该能退出、复位外设、上报错误。

5. 抓电源和复位脚。复位能恢复的问题,很多时候藏在电源、时钟、总线这些边界条件里。

看门狗不是万能保险,它更像最后一道门。门前面的健康检查做得粗,它就会被误导。下次遇到“程序假死、手动复位能好”的板子,先把复位来源、喂狗条件、外设超时、电源波形并起来看,问题范围通常会小很多。

http://www.jsqmd.com/news/1076944/

相关文章:

  • 如何用ColorControl一站式解决多设备显示管理难题:终极解决方案指南
  • Mythos安全大模型:攻击链因果推理与动态推理调度技术解析
  • SQL注入漏洞深度解析:从手工探测到自动化利用的实战指南
  • Collection 与 Map
  • GLM-5昇腾推理适配实战:从模型导出到服务部署的七道关卡
  • Arthas:阿里开源的 Java 线上问题排查工具
  • ZN-080A:鼎讯综合分析仪 全域电磁环境勘测,助力风电场运维数字化落地
  • 宽容老好人 vs 严格完美主义者:HttpURLConnection 迁 HttpClient 的 4 个隐藏陷阱
  • 回归模型评估:从R²陷阱到业务对齐的实战指南
  • 豆包2.0四大实用功能:语音即指令、文档秒读、灵感转待办、格式一键净化
  • Transformers模型实战指南:从代码加载到推理部署
  • 云手机技术解析与实战:用 Python 远程操控云手机实现自动化挂机
  • 达梦数据库重启方法
  • 计算机毕业设计之基于JSP的校园宿舍电费缴纳系统
  • 拦了百万次攻击还是被入侵?逐包核验揪出藏在流量里的3次“漏网之鱼”
  • Poly Haven Assets:如何在Blender中一键获取数千个专业3D资源?
  • Python毕设项目:基于 Python+Vue 的可视化数据购物管理系统设计与实现 基于 Python+Vue 的校园线上购物管理系统 (源码+文档,讲解、调试运行,定制等)
  • 智造未来:从全生命周期视角,看蓝色星球造价机器人如何重塑工程造价
  • ONNX模型封装与生产级API服务实战指南
  • 从 Copilot 到 Agent 集群:我的开发工作流正在被重塑
  • qmcdump:QQ音乐加密音频文件的高效本地解码解决方案
  • 从单调到惊艳:用Blue-Topaz主题彻底改造你的Obsidian笔记界面
  • IntelliJ IDEA安装卡在“Loading Plugins”?一线架构师亲授4步诊断法+底层ClassLoader日志分析法
  • 计算机毕业设计之基于文本画像的研究与实现
  • 从零手写注意力机制:可调试的QKV计算与数值稳定性实践
  • excel操作技巧 ,新手 教程
  • 手写自编码器实战:从信息论到工业级异常检测
  • Composer:PHP 项目的依赖管理工具
  • 鸿蒙进程模型与IPC机制详解
  • 线上投票工具的实用性