machine.WDT

MaixPy 的 WDT 看门狗模块,用于在应用程序崩溃且最终进入不可恢复状态时重启系统。一旦开始,当硬件运行期间没有定期进行喂狗(feed)就会在超时后自动复位。

构造函数

from machine import WDT
wdt0 = WDT(id=1, timeout=4000, callback=on_wdt, context={})

通过指定的参数新建一个 WDT 对象

参数

  • id: 这个看门狗对象必须初始化时必须指定 ID (0 ~ 2) 用于区分使用的看门狗。
  • timeout: 看门狗超时时间,单位为毫秒(ms)。
  • callback: (可选)可以在超时后执行的回调函数。
  • context: (可选)为回调函数传递的参数。

方法

feed

“喂养”看门狗,以防止其重置系统。该应用应将该调用用于合适位置,并确保只在验证一切正常运行后才“喂养”看门狗。

wdt0.feed()

参数

返回值

stop

停止当前看门狗对象

wdt0.stop()

参数

返回值

例程

例程 1 (基础使用)

喂一次狗后便不再喂狗使得系统复位

import time
from machine import WDT

# '''
# test default wdt
wdt0 = WDT(id=0, timeout=3000)
print('into', wdt0)
time.sleep(2)
print(time.ticks_ms())
# 1.test wdt feed
wdt0.feed()
time.sleep(2)
print(time.ticks_ms())
# 2.test wdt stop
# wdt0.stop()

例程 2 (进阶使用)

在回调函数中喂狗,系统正常运行

import time
from machine import WDT
def on_wdt(self):
    print(self.context(), self)
    self.feed()
    ## release WDT
    #self.stop()

# test callback wdt
wdt1 = WDT(id=1, timeout=4000, callback=on_wdt, context={})
print('into', wdt1)
time.sleep(2)
print(time.ticks_ms())
# 1.test wdt feed
wdt1.feed()
time.sleep(2)
print(time.ticks_ms())
# 2.test wdt stop
# wdt1.stop()
# print('stop', wdt1)
# 3.wait wdt work
while True:
    print('idle', time.ticks_ms())
    time.sleep(1)