Skip to content

Commit a8f02ed

Browse files
Andy Rossnashif
authored andcommitted
doc: lib/os: Add overview docs for sys_multi_heap
Add a short section to the "heap" page detailing the new sys_multi_heap utility. Signed-off-by: Andy Ross <[email protected]>
1 parent f3ed0fe commit a8f02ed

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

doc/reference/kernel/memory/heap.rst

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,43 @@ unbounded list searches, at the expense of some fragmentation
9595
resistance. This :c:kconfig:`CONFIG_SYS_HEAP_ALLOC_LOOPS` value may be
9696
chosen by the user at build time, and defaults to a value of 3.
9797

98+
Multi-Heap Wrapper Utility
99+
**************************
100+
101+
The ``sys_heap`` utility requires that all managed memory be in a
102+
single contiguous block. It is common for complicated microcontroller
103+
applications to have more complicated memory setups that they still
104+
want to manage dynamically as a "heap". For example, the memory might
105+
exist as separate discontiguous regions, different areas may have
106+
different cache, performance or power behavior, peripheral devices may
107+
only be able to perform DMA to certain regions, etc...
108+
109+
For those situations, Zephyr provides a ``sys_multi_heap`` utility.
110+
Effectively this is a simple wrapper around a set of one or more
111+
``sys_heap`` objects. It should be initialized after its child heaps
112+
via :c:func:`sys_multi_heap_init`, after which each heap can be added
113+
to the managed set via :c:func:`sys_multi_heap_add_heap`. No
114+
destruction utility is provided; just as for ``sys_heap``,
115+
applications that want to destroy a multi heap should simply ensure
116+
all allocated blocks are freed (or at least will never be used again)
117+
and repurpose the underlying memory for another usage.
118+
119+
It has a single pair of allocation entry points,
120+
:c:func:`sys_multi_heap_alloc` and
121+
:c:func:`sys_multi_heap_aligned_alloc`. These behave identically to
122+
the ``sys_heap`` functions with similar names, except that they also
123+
accept an opaque "configuration" parameter. This pointer is
124+
uninspected by the multi heap code itself; instead it is passed to a
125+
callback function provided at initialization time. This
126+
application-provided callback is responsible for doing the underlying
127+
allocation from one of the managed heaps, and may use the
128+
configuration parameter in any way it likes to make that decision.
129+
130+
When unused, a multi heap may be freed via
131+
:c:func:`sys_multi_heap_free`. The application does not need to pass
132+
a configuration parameter. Memory allocated from any of the managed
133+
``sys_heap`` objects may be freed with in the same way.
134+
98135
System Heap
99136
***********
100137

0 commit comments

Comments
 (0)