Files
WLED/wled00
Damian Schneider 76cb2e9988 Improvements to heap-memory and PSRAM handling (#4791)
* Improved heap and PSRAM handling

- Segment `allocateData()` uses more elaborate DRAM checking to reduce fragmentation and allow for larger setups to run on low heap
- Segment data allocation fails if minimum contiguous block size runs low to keep the UI working
- Increased `MAX_SEGMENT_DATA` to account for better segment data handling
- Memory allocation functions try to keep enough DRAM for segment data
- Added constant `PSRAM_THRESHOLD` to improve PSARM usage
- Increase MIN_HEAP_SIZE to reduce risk of breaking UI due to low memory for JSON response
- ESP32 makes use of IRAM (no 8bit access) for pixeluffers, freeing up to 50kB of RAM
- Fix to properly get available heap on all platforms: added function `getFreeHeapSize()`
- Bugfix for effects that divide by SEGLEN: don't run FX in service() if segment is not active
-Syntax fix in AR: calloc() uses (numelements, size) as arguments

* Added new functions for allocation and heap checking

- added `allocate_buffer()` function that can be used to allocate large buffers: takes parameters to set preferred ram location, including 32bit accessible RAM on ESP32. Returns null if heap runs low or switches to PSRAM
- getFreeHeapSize() and getContiguousFreeHeap() helper functions for all platforms to correctly report free useable heap
- updated some constants
- updated segment data allocation to free the data if it is large

- replaced "psramsafe" variable with it's #ifdef: BOARD_HAS_PSRAM and made accomodating changes
- added some compile-time checks to handle invalid env. definitions
- updated all allocation functions and some of the logic behind them
- added use of fast RTC-Memory where available
- increased MIN_HEAP_SIZE for all systems (improved stability in tests)
- updated memory calculation in web-UI to account for required segment buffer
- added UI alerts if buffer allocation fails
- made getUsedSegmentData() non-private (used in buffer alloc function)
- changed MAX_SEGMENT_DATA
- added more detailed memory log to DEBUG output
- added debug output to buffer alloc function
2025-09-16 19:46:16 +02:00
..
2025-09-03 23:05:20 -04:00
2024-10-02 20:14:25 +02:00
2025-04-23 18:38:34 +02:00
2025-03-11 22:31:19 +00:00
2025-04-26 20:08:15 +02:00
2025-09-09 07:31:19 +02:00
2025-02-19 12:27:10 +01:00
2023-01-06 09:24:29 +01:00
2025-07-16 11:18:04 +02:00
2023-02-08 10:18:41 +01:00
2023-02-04 23:59:28 +01:00
2025-09-01 11:05:31 +08:00
2024-07-11 21:22:58 +02:00
2025-07-01 10:22:49 +02:00
2025-04-26 20:08:15 +02:00
2025-02-19 11:34:29 +01:00
2025-04-26 20:08:15 +02:00
2022-03-20 22:12:18 +01:00
2024-08-14 11:16:46 +02:00