WDT(看门狗定时器)是一种用于检测系统死机的机制。
from machine import WDT
# 创建 WDT 对象,设置超时时间(毫秒)
wdt = WDT(timeout=5000) # 5秒超时
# 喂狗(重置定时器)
wdt.feed()
feed() 方法import machine
import time
# 初始化 WDT,10秒超时
wdt = machine.WDT(timeout=10000)
print('WDT 已启动,每 5 秒喂狗一次')
while True:
print('喂狗')
wdt.feed() # 喂狗
time.sleep(5) # 5秒后再次喂狗
import machine
import time
# 初始化 WDT,8秒超时
wdt = machine.WDT(timeout=8000)
print('系统启动')
while True:
# 执行主要任务
print('执行任务...')
# 喂狗
wdt.feed()
print('喂狗')
# 模拟任务执行时间
time.sleep(3)
import machine
import time
# 初始化 WDT,5秒超时
wdt = machine.WDT(timeout=5000)
print('系统启动')
while True:
try:
# 执行可能出错的任务
print('执行任务...')
# 模拟可能的错误
# x = 1 / 0
# 任务执行成功,喂狗
wdt.feed()
print('喂狗')
except Exception as e:
print('错误:', e)
# 即使出错也要喂狗,避免系统重启
wdt.feed()
time.sleep(2)
from machine import Pin, WDT
import time
led = Pin(25, Pin.OUT)
wdt = WDT(timeout=5000) # 5秒超时
print('WDT 保护的 LED 闪烁')
count = 0
while True:
# LED 闪烁
led.toggle()
# 每闪烁 10 次打印一次
count += 1
if count % 10 == 0:
print(f'已闪烁 {count} 次')
# 喂狗
wdt.feed()
# 延时
time.sleep(0.5)
from machine import WDT
import time
wdt = WDT(timeout=3000) # 3秒超时
print('系统启动')
print('3秒后模拟死机...')
# 前几次正常喂狗
for i in range(3):
print(f'喂狗 {i+1}')
wdt.feed()
time.sleep(1)
print('模拟死机,停止喂狗...')
print('3秒后系统应该会重启')
# 不再喂狗,模拟死机
while True:
print('系统卡住...')
time.sleep(1)
| 板子 | WDT 特性 |
|---|---|
| Raspberry Pi Pico | 支持 WDT,超时时间范围有限制 |
| ESP32 | 支持 WDT,有多种模式 |
| Arduino boards | 部分型号需要外部 WDT 模块 |
| STM32 | 内置 WDT,功能强大 |
Q: WDT 启动后可以关闭吗? A: 通常 WDT 一旦启动就无法关闭,只能通过喂狗来防止重启。
Q: 超时时间设置多长合适? A: 超时时间应该大于系统正常运行时最长的任务执行时间,通常设置为 2-10 秒。
Q: 喂狗太频繁会影响性能吗? A: 喂狗操作通常很快速,不会对性能产生明显影响。