esp32 看门狗 idf代码
时间: 2023-10-04 14:05:58 浏览: 64
ESP32的看门狗(Watchdog)是通过硬件实现的,可用于监视程序的运行状态并在程序崩溃时重启系统。以下是在ESP-IDF中配置和使用看门狗的基本示例代码:
```c
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_event_loop.h"
#include "esp_log.h"
#include "esp_task_wdt.h"
static const char *TAG = "watchdog_example";
void task1(void *pvParameter) {
while(1) {
ESP_LOGI(TAG, "Task 1 running");
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void task2(void *pvParameter) {
while(1) {
ESP_LOGI(TAG, "Task 2 running");
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
}
void app_main(void) {
ESP_LOGI(TAG, "Starting watchdog example");
// 配置看门狗
esp_task_wdt_init(30, true);
// 创建两个任务
xTaskCreate(&task1, "task1", 2048, NULL, 5, NULL);
xTaskCreate(&task2, "task2", 2048, NULL, 5, NULL);
while(1) {
// 重置看门狗计数器
esp_task_wdt_reset();
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
```
在上面的示例代码中,首先使用 `esp_task_wdt_init()` 函数进行看门狗的初始化,这里设置了计数器超时时间为30秒,并开启了看门狗的自动重置功能。然后创建两个任务,分别每隔1秒和2秒输出一条日志。在主任务循环中,使用 `esp_task_wdt_reset()` 函数重置看门狗计数器。如果某个任务崩溃或者停止运行,看门狗计数器将在超时后触发重启系统。