more segment data for PSRAM boards

This commit is contained in:
Frank
2025-12-17 01:10:05 +01:00
parent 6138def82f
commit 87fc226213
2 changed files with 10 additions and 2 deletions

View File

@@ -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

View File

@@ -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
}