Added Global Mutex for SD IOPS, and changed OTA to write directly to Flash

This commit is contained in:
2026-01-07 21:04:33 +02:00
parent 7adc1fec34
commit eb6e0f0e5c
3 changed files with 333 additions and 24 deletions

View File

@@ -122,6 +122,7 @@
// ═══════════════════════════════════════════════════════════════════════════════════
// CUSTOM CLASSES - Include Custom Classes and Functions
// ═══════════════════════════════════════════════════════════════════════════════════
#include "src/SDCardMutex/SDCardMutex.hpp" // ⚠️ MUST be included before any SD-using classes
#include "src/ConfigManager/ConfigManager.hpp"
#include "src/FileManager/FileManager.hpp"
#include "src/TimeKeeper/TimeKeeper.hpp"
@@ -206,6 +207,15 @@ void setup()
SPI.begin(hwConfig.ethSpiSck, hwConfig.ethSpiMiso, hwConfig.ethSpiMosi);
delay(50);
// 🔒 CRITICAL: Initialize SD Card Mutex BEFORE any SD operations
// This prevents concurrent SD access from multiple FreeRTOS tasks
if (!SDCardMutex::getInstance().begin()) {
Serial.println("❌ FATAL: Failed to initialize SD card mutex!");
Serial.println(" System cannot continue safely - entering infinite loop");
while(1) { delay(1000); } // Halt system - unsafe to proceed
}
Serial.println("✅ SD card mutex initialized");
// Initialize Configuration (loads factory identity from NVS + user settings from SD)
configManager.begin();