瀏覽代碼

Prevent SD access from resetting ESP32 (#16690)

felixstorm 4 年之前
父節點
當前提交
e4eaf32b4d
共有 1 個檔案被更改,包括 10 行新增0 行删除
  1. 10
    0
      Marlin/src/sd/SdVolume.cpp

+ 10
- 0
Marlin/src/sd/SdVolume.cpp 查看文件

@@ -291,6 +291,16 @@ int32_t SdVolume::freeClusterCount() {
291 291
       for (uint16_t i = 0; i < n; i++)
292 292
         if (cacheBuffer_.fat32[i] == 0) free++;
293 293
     }
294
+    #ifdef ESP32
295
+      // Needed to reset the idle task watchdog timer on ESP32 as reading the complete FAT may easily 
296
+      // block for 10+ seconds. yield() is insufficient since it blocks lower prio tasks (e.g., idle).
297
+      static millis_t nextTaskTime = 0;
298
+      const millis_t ms = millis();
299
+      if (ELAPSED(ms, nextTaskTime) {
300
+        vTaskDelay(1);            // delay 1 tick (Minimum. Usually 10 or 1 ms depending on skdconfig.h)
301
+        nextTaskTime = ms + 1000; // tickle the task manager again in 1 second
302
+      }
303
+    #endif // ESP32
294 304
   }
295 305
   return free;
296 306
 }

Loading…
取消
儲存