RTOS 系统篇-看门狗 WatchDog 2
概述
上一节在 RTOS 系统篇-看门狗 WatchDog[不喂狗就咬你] 讲解了 看门狗的基本原理,以及任务、中断中触发看门狗的原因、解决方法。
本小节承接上节,主要讨论如何将一个任务加入到看门狗,并及时喂狗。读者可参考示例的用法,理解其基本使用,并在自己使用的平台上找到类似的 API 来学习研究。
ESP-IDF 中的任务看门狗
任务看门狗(TWDT)是围绕定时器组0中的硬件看门狗定时器构建的。
TWDT 可以通过调用 esp_task_wdt_init()
来初始化,它将配置硬件计时器。
然后,任务可以使用 esp_task_wdt_add()
添加到任务看门狗监控队列,以便被监视。
每个添加到任务看门狗的任务必须定期调用 esp_task_wdt_reset()
来重置TWDT。任何添加到任务看门狗的任务若调用 esp_task_wdt_reset()
时返回失败,则表示当前的任务卡在调用该函数前的某个循环中,或者一个或多个任务在长期占用 CPU,使得当前函数没有机会运行 esp_task_wdt_reset()
。
可以使用 esp_task_wdt_delete()
将任务从任务看门狗监控队列中移除。一旦所有任务都从 TWD