diff --git a/wled00/fcn_declare.h b/wled00/fcn_declare.h index e86d76c65f..6201a19192 100644 --- a/wled00/fcn_declare.h +++ b/wled00/fcn_declare.h @@ -524,10 +524,10 @@ inline size_t getFreeHeapSize() { return ESP.getFreeHeap(); } // returns free he inline size_t getContiguousFreeHeap() { return ESP.getMaxFreeBlockSize(); } // returns largest contiguous free block #endif #define BFRALLOC_NOBYTEACCESS (1 << 0) // ESP32 has 32bit accessible DRAM (usually ~50kB free) that must not be byte-accessed -#define BFRALLOC_PREFER_DRAM (1 << 1) // prefer DRAM over PSRAM -#define BFRALLOC_ENFORCE_DRAM (1 << 2) // use DRAM only, no PSRAM -#define BFRALLOC_PREFER_PSRAM (1 << 3) // prefer PSRAM over DRAM -#define BFRALLOC_ENFORCE_PSRAM (1 << 4) // use PSRAM if available, otherwise uses DRAM +#define BFRALLOC_PREFER_DRAM (1 << 1) // prefer DRAM over PSRAM (can still use PSRAM for larger allocations if DRAM is starting to run low) +#define BFRALLOC_ENFORCE_DRAM (1 << 2) // use DRAM only, no PSRAM allowed +#define BFRALLOC_PREFER_PSRAM (1 << 3) // prefer PSRAM over DRAM (can still use DRAM if there is loads of free DRAM to optimize speed) +#define BFRALLOC_ENFORCE_PSRAM (1 << 4) // use PSRAM if available, falls back to DRAM if PSRAM fails #define BFRALLOC_CLEAR (1 << 5) // clear allocated buffer after allocation void *allocate_buffer(size_t size, uint32_t type); diff --git a/wled00/util.cpp b/wled00/util.cpp index 66aaea97fc..a9be0a482c 100644 --- a/wled00/util.cpp +++ b/wled00/util.cpp @@ -920,7 +920,7 @@ void *allocate_buffer(size_t size, uint32_t type) { buffer = p_malloc(size); // prefer PSRAM } else if (type & BFRALLOC_ENFORCE_PSRAM) - buffer = heap_caps_malloc(size, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); // use PSRAM only, otherwise return nullptr + buffer = p_malloc(size); // use PSRAM if available, fall back to DRAM if not (safeguard for boards without PSRAM #5629) buffer = validateFreeHeap(buffer); #endif if (buffer && (type & BFRALLOC_CLEAR))