From 3d6fe0a5659fefd364b3e6a30a61a7e6201258af Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sat, 16 Dec 2023 12:38:15 +0100 Subject: [PATCH] Reduce memory fragmentation --- wled00/FX_fcn.cpp | 9 ++++++--- wled00/wled.h | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 30218a4f00..42984a051e 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -144,10 +144,13 @@ Segment& Segment::operator= (Segment &&orig) noexcept { } bool IRAM_ATTR Segment::allocateData(size_t len) { - if (data && _dataLen == len) return true; //already allocated + if (data && _dataLen >= len) { // already allocated enough (reduce fragmentation) + if (call == 0) memset(data, 0, len); // erase buffer if called during effect initialisation + return true; + } //DEBUG_PRINTF("-- Allocating data (%d): %p\n", len, this); deallocateData(); - if (len == 0) return(false); // nothing to do + if (len == 0) return false; // nothing to do if (Segment::getUsedSegmentData() + len > MAX_SEGMENT_DATA) { // not enough memory DEBUG_PRINT(F("!!! Effect RAM depleted: ")); @@ -156,7 +159,7 @@ bool IRAM_ATTR Segment::allocateData(size_t len) { } // do not use SPI RAM on ESP32 since it is slow data = (byte*) malloc(len); - if (!data) { DEBUG_PRINTLN(F("!!! Allocation failed. !!!")); return false; } //allocation failed + if (!data) { DEBUG_PRINTLN(F("!!! Allocation failed. !!!")); return false; } // allocation failed Segment::addUsedSegmentData(len); //DEBUG_PRINTF("--- Allocated data (%p): %d/%d -> %p\n", this, len, Segment::getUsedSegmentData(), data); _dataLen = len; diff --git a/wled00/wled.h b/wled00/wled.h index 849c660e17..db1a3cfc27 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2312020 +#define VERSION 2312160 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG