关于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给其他任务

在这里插入图片描述
在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐