Watchdog - 简单的 WDT
材料准备
- AmebaPro2 [ AMB82 MINI ] x 1
范例说明
介绍
这是一个简单的Watchdog定时器 (WDT) 范例,示范了Watchdog API 的用法。 Watchdog的定义和工作原理可以参考以下资料。
Watchdog
Watchdog定时器是一种硬件定时器,用于检测软件故障的发生,然后在编程周期到期时自动生成系统重置或Watchdog中断。
一般来说,想像一下您的微控制器陷入无限循环的情况,或者像微控制器在执行某些任务时卡住的任何情况。正常的故障排除方法是按下重置按钮并跳出无限循环。然而,一直按下按钮实际上是不可能的,因此,嵌入在微控制器中的Watchdog定时器可以帮助解决这种情况。
Feed the Dog
如果您的家中有一只狗。您需要定期喂食。如果一天不能喂食,它会咬你!同样,这是Watchdog定时器背后的工作逻辑。
在我们的范例中,我们创建了2个任务,其中包含一次又一次重复运行的循环,一个称为Small_Task任务,另一个称为Big_Task任务。我们使Watchdog定时器的初始值(5秒)大于Small_Task任务的总延迟,但比Big_Task任务的延迟短。
对于Small_Task任务的情况,Watchdog将在5秒内刷新/喂食,但是,对于Big_Task任务的情况,循环正在处理中,并且Watchdog在5秒后仍不刷新,这会触发Watchdog 以重置处理器。同样,Watchdog定时器可以保护微控制器免受卡住情况的影响。
流程
连接开发板,然后从 Arduino IDE 打开范例,“File”->“Examples”->“AmebaWatchdog”->“SimpleWDT”。
上传前需要完成 2 个设置。
定义名称 | 设定值 | 功能说明 |
---|---|---|
AON_WDT_Enable | 1 | Watchdog timer sets to always on |
AON_WDT_Enable | 0 | always on disabled |
RUN_CALLBACK_IF_WATCHDOG_BARKS | 1 | Execute IRQ functions after “barks” |
RUN_CALLBACK_IF_WATCHDOG_BARKS | 0 | IRQ disabled |
请注意,当“AON_WDT_Enable”设置为“1”时,不支持 IRQ。
成功上传范例代码后,打开串行监视器,然后按重置按钮。
您会发现Small_Task任务可以在5秒内刷新Watchdog(初始化Watchdog定时器)。但是,Big_Task任务将无法在5秒内刷新Watchdog,这将导致微控制器重置。
当设置“#define RUN_CALLBACK_IF_WATCHDOG_BARKS (0)”值为“1”时,用于自定义“my_watchdog_irq_handler”。可以在处理程序中编写代码以执行。