赞
踩
官方文档:Watchdogs
ESP-IDF支持两种类型的看门狗:
Interrupt wdt timeout on CPU0
或 Interrupt wdt timeout on CPU1
。CONFIG_ESP_TASK_WDT
:如果禁用此选项,仍可以通过调用在运行时初始化任务WDT esp_task_wdt_init()
CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0
:CPU0 Idle task在启动期间订阅到TWDT。如果禁用此选项,仍可以在任何时候调用esp_task_wdt_add()
订阅。CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1
:CPU1 Idle task在启动期间订阅到TWDT。同上。函数 | 描述 |
---|---|
esp_task_wdt_init | 初始化任务看门狗计时器(TWDT) |
esp_task_wdt_deinit | 取消初始化任务监视计时器(TWDT) |
esp_task_wdt_add | 将任务订阅到任务监视计时器(TWDT) |
esp_task_wdt_reset | 当前正在运行的任务重置任务看门狗计时器(TWDT) |
esp_task_wdt_delete | 从任务监视计时器(TWDT)取消订阅任务 |
esp_task_wdt_status | 查询任务是否已订阅任务监视程序计时器(TWDT) |
make menuconfig
以下为默认配置:
Component config --->
Common ESP-related --->
[*] Interrupt watchdog
(300) Interrupt watchdog timeout (ms)
[*] Also watch CPU1 tick interrupt
[*] Initialize Task Watchdog Timer on startup # 启动时初始化任务监视程序计时器
[ ] Invoke panic handler on Task Watchdog timeout # 在任务监视程序超时时调用紧急处理程序(任务看门狗超时之后重启)
(5) Task Watchdog timeout period (seconds)
[*] Watch CPU0 Idle Task
[*] Watch CPU1 Idle Task
Invoke panic handler on Task Watchdog timeout
任务看门狗超时之后是否重启,默认是关闭的,最好设置成打开。esp_task_wdt_init
函数,可以更新TWDT的超时时间和死机配置。TWDT
,所以配置好了直接使用可以不再调用 esp_task_wdt_init
函数。官方示例:system/task_watchdog
使用示例:
#include "esp_task_wdt.h"
void a_task(void *arg)
{
esp_task_wdt_add(NULL);
while(1){
esp_task_wdt_reset();
vTaskDelay(pdMS_TO_TICKS(100));
}
vTaskDelete(NULL);
esp_task_wdt_delete(NULL);
}
如果没有及时喂狗(例如上述示例不调用 esp_task_wdt_reset()
):
E (11313) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
E (11313) task_wdt: - a_task (CPU 0)
E (11313) task_wdt: Tasks currently running:
E (11313) task_wdt: CPU 0: b_task
E (11313) task_wdt: CPU 1: IDLE1
E (11313) task_wdt: Aborting.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。