This commits adds a internal.md file in the heap directory to clarify the idea behind which functions is placed in IRAM or in flash. A section in mem_alloc.rst documentation is added to specify which functions from the heap component API can be used in interrupt handlers.
1.2 KiB
Function placement in IRAM section
The heap component is compiled and linked in a way that minimizes the utilization of the IRAM section of memory without impacting the performance of its core functionalities. For this reason, the heap component API provided through esp_heap_caps.h and esp_heap_caps_init.h can be sorted into two sets of functions.
-
The performance related functions placed into the IRAM by using the
IRAM_ATTR
defined in esp_attr.h (e.g.,heap_caps_malloc
,heap_caps_free
,heap_caps_realloc
, etc.) -
The functions that does not require the best of performance placed in the flash (e.g.,
heap_caps_print_heap_info
,heap_caps_dump
,heap_caps_dump_all
, etc.)
With that in mind, all the functions defined in multi_heap.c, multi_heap_poisoning.c and tlsf.c that are directly or indirectly called from one of the heap component API functions placed in IRAM have to also be placed in IRAM. Symmetrically, the functions directly or indirectly called from one of the heap component API functions placed in flash will also be placed in flash.