赞
踩
关于ESP32循环读写文件触发看门狗的解决方法
PlatformIO: Upload and Monitor (esp32dev)(333) - Ta
E (30145) task wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
E (30145) task_wdt: - async_tcp (CPU 0/1)
E (30145) task wdt: Tasks currently running:
E (30145) task wdt: CPU 0: IDLE
E (30145) task wdt: CPU 1: loopTask
E (30145) task_wdt: Aborting.
abort() was called at PC 0x400f0749 on core 0
我使用esp32进行从SD转移文件到LittleFS,循环读写触发看门狗报错
通过TGP反复查询测试得出以下代码
#include <Arduino.h>
#include <esp_task_wdt.h>
void setup() {
// 初始化其他设置
// ...
// 启用看门狗定时器
esp_task_wdt_init(5, true); // 设置看门狗超时时间为5秒,第二个参数为true表示启用看门狗
// 启动一个任务,定期执行喂狗操作
xTaskCreatePinnedToCore(taskFunction, "WatchdogTask", 1000, NULL, 1, NULL, 1);
}
void loop() {
// 进行主要的任务
// ...
// 此处不需要调用 yield(),由任务中的喂狗操作来管理
}
void taskFunction(void* parameter) {
for (;;) {
// 喂狗,避免看门狗定时器超时
esp_task_wdt_reset();
// 一些其他任务操作
// ...
// 适当的延时,以避免过于频繁的喂狗
vTaskDelay(pdMS_TO_TICKS(1000)); // 1秒延时
}
}
经测试,已解决喂狗问题成功完成循环读写,由于ESP文件读写时间过长导致任务挂起时间过长,无法释放cpu给其他任务
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。