diff --git a/wled00/FX.h b/wled00/FX.h index b63b11a9..d0f3d403 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -86,7 +86,11 @@ extern BusManager busses; // same as wled.h #if defined(ARDUINO_ARCH_ESP32S2) #define MAX_SEGMENT_DATA 24576 #else - #define MAX_SEGMENT_DATA 32767 + #if defined(BOARD_HAS_PSRAM) + #define MAX_SEGMENT_DATA 65534 // 64KB on PSRAM boards + #else + #define MAX_SEGMENT_DATA 32767 // 32KB on non-PSRAM boards + #endif #endif #endif #endif diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 47dbf4bd..a7db2444 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -232,7 +232,11 @@ bool Segment::allocateData(size_t len, bool allowOverdraft) { // WLEDMM allowOv if (len == 0) return false; // nothing to do if (Segment::getUsedSegmentData() + len > MAX_SEGMENT_DATA) { if (!allowOverdraft || (Segment::getUsedSegmentData() + len > MAX_SEGMENT_OVERDATA)) { // WLEDMM 50% overdraft allowed temporarily - //USER_PRINTF("Segment::allocateData: Segment data quota exceeded! used:%u request:%u max:%d\n", Segment::getUsedSegmentData(), len, MAX_SEGMENT_DATA); + static unsigned lastMsgTime = 0; + if (millis() - lastMsgTime > 5000) { + USER_PRINTF("Segment::allocateData: Segment data quota exceeded! used:%u request:%u max:%d\n", Segment::getUsedSegmentData(), len, MAX_SEGMENT_DATA); + lastMsgTime = millis(); + } if (len > 0) errorFlag = ERR_LOW_SEG_MEM; // WLEDMM raise errorflag return false; //not enough memory }