8.修勾别复位,我来喂你
# 修勾别复位,我来喂你
# 1. 什么是看门狗(WDT)?
“看门狗”WDT(Watchdog Timer)其实就是一个“定时复位装置”。如果你的程序一不小心跑飞了、死循环了、不响应了,看门狗就会跳出来重启系统,类似“自动拔电源再插一下”的狠角色。
🧠 类比理解:
- 正常工作时,你要定期喂它一口饭(喂狗)
- 要是你忘了,它就“发疯咬你”,直接给你复位
WDT = “你要活着,就别忘了让我知道你还活着”
# 2. WDT 的用途场景
场景 | 说明 |
---|---|
程序卡死检测 | 代码死循环,无法退出,系统僵住 |
内存溢出保护 | 异常分配造成堆栈错乱 |
定时自检/重启 | 系统定期刷个存在感 |
工业嵌入式应用 | 提高系统可靠性,关键设备必备 |
# 3. 喂狗的基本素养
from machine import WDT
import time
# 初始化看门狗:设定超时时间(单位:毫秒)
wdt = WDT(timeout=3000)
while True:
print("我还活着,别复位我!")
time.sleep(2)
wdt.feed() # 喂狗,重置倒计时
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# ⚙️ 参数说明:
参数名 | 说明 |
---|---|
timeout | 看门狗超时时间(ms) |
.feed() | 喂狗,避免复位 |
# 4. 实验:假装程序死掉会发生什么?
你可以试试不喂狗,看系统会不会乖乖复位:
from machine import WDT
import time
wdt = WDT(timeout=3000)
while True:
print("我装死3秒,你咬我啊")
time.sleep(4) # 故意超过 3 秒不喂狗
# 没有 wdt.feed(),系统会被复位
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
运行这个程序,3秒一过,K230会毫不犹豫地重启系统。日志会在串口里显示 WDT Reset
字样。
# 5. 复位之后能干点啥?
你可以通过 machine.reset_cause()
检查系统是被谁复位的,看看是不是狗咬的:
import machine
cause = machine.reset_cause()
if cause == machine.WDT_RESET:
print("🐶 看门狗复位了我")
else:
print("🔄 普通复位或其他原因")
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
这招适合在程序一启动就知道“我为什么会在这里”,有助于你搞清楚系统稳定性问题。
# 6. 注意事项
- 超时时间单位是毫秒,别写成 3 以为是 3 秒,结果狗没来你先懵。
- 一旦初始化看门狗,就必须喂狗,否则它肯定咬你。
- 有些平台支持禁用WDT,但在 K230 中你一旦启用就是实打实的“忠犬八公”。
- 如果你的任务循环时间比 WDT 超时时间长,你得手动
feed()
前做分段设计。
# 7. 进阶玩法建议(可拓展)
想法 | 说明 |
---|---|
重启后记录信息 | 比如把“崩了”的位置写进 Flash/RTC RAM |
多线程喂狗 | 不同任务交替喂狗,检测线程挂死 |
设置“看门狗门槛” | 控制只有特定条件才启动 WDT |
# 8. 总结
🐶 看门狗的存在,是为了在你犯错时拉你一把(顺便咬你一口)。 它不是万能的防挂机制,但在工业级系统里,它是可靠性的大哥大。 写完代码别忘了加喂狗逻辑,就像每天给你的宠物倒碗饭,不然第二天你就得找补丁了。
# 参考资料
- K230 WDT 官方文档 (opens new window)
- MicroPython WDT API 文档
# 免责声明
本文档及所有内容(包括文字、图片、代码等)均为作者基于嘉立创庐山派K230开发板公开资料和个人使用经验整理分享,仅供学习和技术交流之用。
所有涉及的品牌名称、商标、图片及相关资源均归嘉立创官方所有,未经授权不得用于商业宣传或其他用途。
作者与嘉立创官方无任何隶属或代理关系,内容不构成任何形式的官方承诺或保证。
用户在使用相关资源时,应遵守相应的开源协议和法律法规,确保合法合规。
如涉及版权问题,请联系作者或嘉立创官方处理。
帮助我们改善此页面 (opens new window)
上次更新: 2025/07/12, 16:01:22