esp_task_wdt_reset(); 超时
时间: 2024-09-20 11:14:33 浏览: 44
`esp_task_wdt_reset()` 是ESP32(Espressif System)框架中的一个函数,主要用于实现任务看门狗(Watchdog Timer,WDT)。看门狗是一种防止系统长时间无响应而崩溃的安全机制,如果某个任务执行超时,看门狗就会发送一个复位信号,强制重启受影响的任务或整个系统。
当你在ESP32程序中调用 `esp_task_wdt_reset()`,意味着你已经设置了一个任务看门狗,并且该任务超过了预设的超时时间。这通常是为了检测和处理任务运行异常情况,例如死锁、无限循环等。
举个例子,如果你在创建一个后台任务并在其中执行一段耗时操作,可能会这样做:
```cpp
void* myTask(void* arg) {
while (true) {
performExpensiveOperation();
if (esp_task_wdt_feed()) { // 给看门狗喂食,暂停超时计时
continue;
} else {
// 超时了,任务执行有问题,重置看门狗然后退出任务
esp_task_wdt_reset();
vTaskDelete(NULL);
break;
}
}
}
// 初始化任务并设置超时时间为1s
xTaskCreate(myTask, "MyTask", ... , pdTRUE, ... , &taskHandle);
xTaskGetTimeRemaining(taskHandle); // 获取剩余的超时时间
```
当`performExpensiveOperation()`耗时超过1s(这里设置的超时时间),看门狗便会发送一个reset信号,终止当前任务并允许系统恢复。
阅读全文