From e4eaf32b4da705c924087bcb1d9f720fb8beb731 Mon Sep 17 00:00:00 2001 From: felixstorm Date: Tue, 28 Jan 2020 01:16:44 +0100 Subject: [PATCH] Prevent SD access from resetting ESP32 (#16690) --- Marlin/src/sd/SdVolume.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Marlin/src/sd/SdVolume.cpp b/Marlin/src/sd/SdVolume.cpp index 926dd1c7d..c51e42108 100644 --- a/Marlin/src/sd/SdVolume.cpp +++ b/Marlin/src/sd/SdVolume.cpp @@ -291,6 +291,16 @@ int32_t SdVolume::freeClusterCount() { for (uint16_t i = 0; i < n; i++) if (cacheBuffer_.fat32[i] == 0) free++; } + #ifdef ESP32 + // Needed to reset the idle task watchdog timer on ESP32 as reading the complete FAT may easily + // block for 10+ seconds. yield() is insufficient since it blocks lower prio tasks (e.g., idle). + static millis_t nextTaskTime = 0; + const millis_t ms = millis(); + if (ELAPSED(ms, nextTaskTime) { + vTaskDelay(1); // delay 1 tick (Minimum. Usually 10 or 1 ms depending on skdconfig.h) + nextTaskTime = ms + 1000; // tickle the task manager again in 1 second + } + #endif // ESP32 } return free; }