Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SPIFFS Mounting Causing Error #10547

Open
1 task done
alogusAdam opened this issue Oct 31, 2024 · 6 comments
Open
1 task done

SPIFFS Mounting Causing Error #10547

alogusAdam opened this issue Oct 31, 2024 · 6 comments
Labels
Status: Awaiting triage Issue is waiting for triage

Comments

@alogusAdam
Copy link

Board

ESP32 Dev Module

Device Description

DevKitC (4MB)

Hardware Configuration

No Connections

Version

latest master (checkout manually)

IDE Name

Arduino IDE

Operating System

Windows 11

Flash frequency

80MHz

PSRAM enabled

no

Upload speed

921600

Description

Copied from my old issue #10499 that I marked as closed: Whenever I attempt to mount SPIFFS with SPIFFS.begin(true);, the following message prints over and over again in the serial monitor:

E (1030) task_wdt: esp_task_wdt_reset(763): task not found
E (1030) task_wdt: esp_task_wdt_reset(763): task not found
E (1062) task_wdt: esp_task_wdt_reset(763): task not found
E (1063) task_wdt: esp_task_wdt_reset(763): task not found
E (1064) task_wdt: esp_task_wdt_reset(763): task not found
E (1066) task_wdt: esp_task_wdt_reset(763): task not found
E (1102) task_wdt: esp_task_wdt_reset(763): task not found
E (1103) task_wdt: esp_task_wdt_reset(763): task not found
E (1103) task_wdt: esp_task_wdt_reset(763): task not found
E (1134) task_wdt: esp_task_wdt_reset(763): task not found
E (1135) task_wdt: esp_task_wdt_reset(763): task not found
E (1136) task_wdt: esp_task_wdt_reset(763): task not found
E (1138) task_wdt: esp_task_wdt_reset(763): task not found
E (1175) task_wdt: esp_task_wdt_reset(763): task not found

and the SPIFFS mount fails. I am running into this issue with all sorts of firmware that uses SPIFFS and used to work without any problems. To simplify things, I am running the SPIFFS_Test.ino example and running into the same issue. I have tried this on multiple boards, updated Arduino IDE to the latest version, and updated the ESP32 board package to the latest version, none of which resolve the issue. When SPIFFS.begin(false); is run, the error does not print, but SPIFFS mount fails.

Why I'm reopening this issue:
I closed the last issue with "Not exactly sure what the issue was here, but it ran fine when compiled and uploaded from another computer. I deleted the folder at "C:/Users//AppData/Roaming/arduino-ide", and this seems to have resolved the issue."

Since then, I have run into the issue again--seemingly out of nowhere. I tried uploading from another computer again--no issue. So, I thought something was wrong with my Arduino IDE. I uninstalled, deleted the ".arduinoIDE" folder under C:/Users/Owner along with local and roaming Arduino IDE data in C:/Users/Owner/AppData, restarted my computer, and reinstalled a fresh copy of Arduino IDE. Uploading to the same board that was previously experiencing issues (but most recently uploaded from another computer where it ran fine), I encountered no issue. I now am realizing this is likely because SPIFFS was already mounted from the code uploaded from another computer. After erasing flash and reuploading, I ran into the same issue.

So, I tried uninstalling Arduino IDE, reinstalling, etc., and nothing worked. I went to the computer that was able to upload successfully, and after uploading from that computer, I am still getting this task_wdt error! Nothing changed. Was this board "infected" somehow? I tried with a board that had never been used before--same issue. I tried an ESP32-S3--same issue.

I downgraded to board package release 2.0.17, and SPIFFS seems to mount no problem. I've looked through the migration guide and can't find anything that I should have changed. And I'd at least expect the example code to work fine here. Happy to include any other information I can.

Sketch

#include "FS.h"
#include "SPIFFS.h"

/* You only need to format SPIFFS the first time you run a
   test or else use the SPIFFS plugin to create a partition
   https://github.com/me-no-dev/arduino-esp32fs-plugin */
#define FORMAT_SPIFFS_IF_FAILED true

void listDir(fs::FS &fs, const char *dirname, uint8_t levels) {
  Serial.printf("Listing directory: %s\r\n", dirname);

  File root = fs.open(dirname);
  if (!root) {
    Serial.println("- failed to open directory");
    return;
  }
  if (!root.isDirectory()) {
    Serial.println(" - not a directory");
    return;
  }

  File file = root.openNextFile();
  while (file) {
    if (file.isDirectory()) {
      Serial.print("  DIR : ");
      Serial.println(file.name());
      if (levels) {
        listDir(fs, file.path(), levels - 1);
      }
    } else {
      Serial.print("  FILE: ");
      Serial.print(file.name());
      Serial.print("\tSIZE: ");
      Serial.println(file.size());
    }
    file = root.openNextFile();
  }
}

void readFile(fs::FS &fs, const char *path) {
  Serial.printf("Reading file: %s\r\n", path);

  File file = fs.open(path);
  if (!file || file.isDirectory()) {
    Serial.println("- failed to open file for reading");
    return;
  }

  Serial.println("- read from file:");
  while (file.available()) {
    Serial.write(file.read());
  }
  file.close();
}

void writeFile(fs::FS &fs, const char *path, const char *message) {
  Serial.printf("Writing file: %s\r\n", path);

  File file = fs.open(path, FILE_WRITE);
  if (!file) {
    Serial.println("- failed to open file for writing");
    return;
  }
  if (file.print(message)) {
    Serial.println("- file written");
  } else {
    Serial.println("- write failed");
  }
  file.close();
}

void appendFile(fs::FS &fs, const char *path, const char *message) {
  Serial.printf("Appending to file: %s\r\n", path);

  File file = fs.open(path, FILE_APPEND);
  if (!file) {
    Serial.println("- failed to open file for appending");
    return;
  }
  if (file.print(message)) {
    Serial.println("- message appended");
  } else {
    Serial.println("- append failed");
  }
  file.close();
}

void renameFile(fs::FS &fs, const char *path1, const char *path2) {
  Serial.printf("Renaming file %s to %s\r\n", path1, path2);
  if (fs.rename(path1, path2)) {
    Serial.println("- file renamed");
  } else {
    Serial.println("- rename failed");
  }
}

void deleteFile(fs::FS &fs, const char *path) {
  Serial.printf("Deleting file: %s\r\n", path);
  if (fs.remove(path)) {
    Serial.println("- file deleted");
  } else {
    Serial.println("- delete failed");
  }
}

void testFileIO(fs::FS &fs, const char *path) {
  Serial.printf("Testing file I/O with %s\r\n", path);

  static uint8_t buf[512];
  size_t len = 0;
  File file = fs.open(path, FILE_WRITE);
  if (!file) {
    Serial.println("- failed to open file for writing");
    return;
  }

  size_t i;
  Serial.print("- writing");
  uint32_t start = millis();
  for (i = 0; i < 2048; i++) {
    if ((i & 0x001F) == 0x001F) {
      Serial.print(".");
    }
    file.write(buf, 512);
  }
  Serial.println("");
  uint32_t end = millis() - start;
  Serial.printf(" - %u bytes written in %lu ms\r\n", 2048 * 512, end);
  file.close();

  file = fs.open(path);
  start = millis();
  end = start;
  i = 0;
  if (file && !file.isDirectory()) {
    len = file.size();
    size_t flen = len;
    start = millis();
    Serial.print("- reading");
    while (len) {
      size_t toRead = len;
      if (toRead > 512) {
        toRead = 512;
      }
      file.read(buf, toRead);
      if ((i++ & 0x001F) == 0x001F) {
        Serial.print(".");
      }
      len -= toRead;
    }
    Serial.println("");
    end = millis() - start;
    Serial.printf("- %u bytes read in %lu ms\r\n", flen, end);
    file.close();
  } else {
    Serial.println("- failed to open file for reading");
  }
}

void setup() {
  Serial.begin(115200);
  if (!SPIFFS.begin(FORMAT_SPIFFS_IF_FAILED)) {
    Serial.println("SPIFFS Mount Failed");
    return;
  }

  listDir(SPIFFS, "/", 0);
  writeFile(SPIFFS, "/hello.txt", "Hello ");
  appendFile(SPIFFS, "/hello.txt", "World!\r\n");
  readFile(SPIFFS, "/hello.txt");
  renameFile(SPIFFS, "/hello.txt", "/foo.txt");
  readFile(SPIFFS, "/foo.txt");
  deleteFile(SPIFFS, "/foo.txt");
  testFileIO(SPIFFS, "/test.txt");
  deleteFile(SPIFFS, "/test.txt");
  Serial.println("Test complete");
}

void loop() {}

Debug Message

E (1184) task_wdt: esp_task_wdt_reset(763): task not found
E (1185) task_wdt: esp_task_wdt_reset(763): task not found
E (1186) task_wdt: esp_task_wdt_reset(763): task not found
E (1188) task_wdt: esp_task_wdt_reset(763): task not found
E (1224) task_wdt: esp_task_wdt_reset(763): task not found
E (1225) task_wdt: esp_task_wdt_reset(763): task not found
E (1225) task_wdt: esp_task_wdt_reset(763): task not found
E (1257) task_wdt: esp_task_wdt_reset(763): task not found
E (1258) task_wdt: esp_task_wdt_reset(763): task not found
E (1259) task_wdt: esp_task_wdt_reset(763): task not found
E (1261) task_wdt: esp_task_wdt_reset(763): task not found
E (1296) task_wdt: esp_task_wdt_reset(763): task not found
E (1297) task_wdt: esp_task_wdt_reset(763): task not found
E (1297) task_wdt: esp_task_wdt_reset(763): task not found
E (1329) task_wdt: esp_task_wdt_reset(763): task not found

Other Steps to Reproduce

The following settings were used in Arduino IDE:
Board: "ESP32 Dev Module"
CPU Frequency: "240MHz (WiFi/BT)"
Core Debug Level: "None" Tried setting this to verbose with no additional info gained
Erase All Flash Before Sketch Upload: "Disabled" Tried setting to true and got the same results
Events Run On: "Core 1"
Flash Frequency: "80MHz"
Flash Mode: "QIO"
Flash Size: "4MB (32Mb)"
JTAG Adapter: "Disabled"
Arduino Runs On: "Core 1"
Partition Scheme: "Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"
PSRAM: "Disabled"
Upload Speed: "921600"
Zigbee Mode: "Disabled"

I have checked existing issues, online documentation and the Troubleshooting Guide

  • I confirm I have checked existing issues, online documentation and Troubleshooting guide.
@alogusAdam alogusAdam added the Status: Awaiting triage Issue is waiting for triage label Oct 31, 2024
@alogusAdam
Copy link
Author

alogusAdam commented Nov 5, 2024

Not the most elegant solution, but I for now I copied and pasted the SPIFFS folder from 2.0.17 into C:\Users<OWNER>\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries, and this seems to have resolved the issue. Hopefully there will be a fix for this, but it seems something from the upgrade to 2.0.17 to 3.0.0 is causing this issue--at least it is contained within the SPIFFS src code.

@alogusAdam
Copy link
Author

The issue returned and the temporary solution from my most recent comment did not resolve the issue this time.

@alogusAdam
Copy link
Author

It seems SPIFFS does eventually mount successfully, though it takes ~35 seconds and the E (40114) task_wdt: esp_task_wdt_reset(763): task not found error prints ~100x per second during that time. Is there a way around this? Is this pointing to some other issue(s)?

@me-no-dev
Copy link
Member

it's just trying to feed the idle task WDT while formatting. But because we disable it on the second core, it prints error. We will look into suppressing it

@dquadros
Copy link

dquadros commented Nov 7, 2024

it's just trying to feed the idle task WDT while formatting. But because we disable it on the second core, it prints error. We will look into suppressing it

Not directly related to this issue, but when (which version) was the idle task WDT disabled on the second core?

I've seem this "task not found" messages with another library. What should we do with code that is supposed to work with arduino-esp32 version 3 and previous versions? Is there a way to check if the idle task WDT is enabled at the current core?

@me-no-dev
Copy link
Member

All dual-core chips have it disabled for the second core. Has been always like that, but the logs were not printed before. Maybe they were added in a more recent IDF versions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Status: Awaiting triage Issue is waiting for triage
Projects
None yet
Development

No branches or pull requests

3 participants