任务加入看门狗列表
看门狗设置
在ESP-IDF中输入命令idf.py menuconfig
进入Component config
-> ESP System Settings
下可使能看门狗、中断看门狗超时时间、初始化任务看门狗、任务看门狗超时时间
添加任务至看门狗列表
向任务看门狗定时器(TWDT)订阅一个任务。
这个函数向TWDT订阅一个任务。每个订阅的任务必须定期调用esp_task_wdt_reset()
,以防止TWDT超时。如果不这样做,将导致TWDT超时。
头文件:esp_tak_wdt.h
esp_err_t esp_task_wdt_add(TaskHandle_t task_handle)
parameters | description |
---|---|
task_handle | 需要添加的任务句柄,NULL为本任务 |
return | 成功与否 |
重置看门狗定时器
代表当前运行的任务重置任务看门狗定时器(TWDT)。该函数将代表当前运行的任务重置TWDT。每个订阅的任务必须定期调用此函数,以防止TWDT超时。如果一个或多个订阅任务不能代表自己重置TWDT,则会发生TWDT超时。
头文件:esp_tak_wdt.h
esp_err_t esp_task_wdt_reset(void)
parameters | description |
---|---|
return | 成功与否 |
代码示例
#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "esp_tak_wdt.h"
void task1(void *pvParam)
{
esp_task_wdt_add(NULL);
while (1)
{
printf("task1!\n");
vTaskDelay(3000 / portTICK_PERIOD_MS);
esp_task_wdt_reset();
}
}
void task2(void *pvParam)
{
while (1)
{
printf("task2!\n");
vTaskDelay(3000 / portTICK_PERIOD_MS);
}
}
void app_main(void)
{
xTaskCreate(task1, "task1", 4096, NULL, 1, NULL);
xTaskCreate(task2, "task2", 4096, NULL, 1, NULL);
}