Files
WLED/usermods
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
..
2021-10-31 11:57:41 +01:00
2025-05-06 22:38:33 -04:00
2025-07-03 20:00:53 +02:00
2024-02-09 22:15:29 +01:00
2025-05-06 22:12:01 -04:00
2025-05-11 12:19:03 -04:00
2025-08-30 04:12:46 +02:00
2025-05-11 12:19:03 -04:00

Usermods

This folder serves as a repository for usermods (custom usermod.cpp files)!

If you have created a usermod you believe is useful (for example to support a particular sensor, display, feature...), feel free to contribute by opening a pull request!

In order for other people to be able to have fun with your usermod, please keep these points in mind:

  • Create a folder in this folder with a descriptive name (for example usermod_ds18b20_temp_sensor_mqtt)
  • Include your custom files
  • If your usermod requires changes to other WLED files, please write a readme.md outlining the steps one needs to take
  • Create a pull request!
  • If your feature is useful for the majority of WLED users, I will consider adding it to the base code!

While I do my best to not break too much, keep in mind that as WLED is updated, usermods might break.
I am not actively maintaining any usermod in this directory, that is your responsibility as the creator of the usermod.

For new usermods, I would recommend trying out the new v2 usermod API, which allows installing multiple usermods at once and new functions! You can take a look at EXAMPLE_v2 for some documentation and at Temperature for a completed v2 usermod!

Thank you for your help :)