diff --git a/doc/releases/release-notes-4.2.rst b/doc/releases/release-notes-4.2.rst index 03921a240a3..ef127d35962 100644 --- a/doc/releases/release-notes-4.2.rst +++ b/doc/releases/release-notes-4.2.rst @@ -132,6 +132,7 @@ New APIs and options * :c:func:`timespec_normalize` * :c:func:`timespec_from_timeout` * :c:func:`timespec_to_timeout` + * :c:func:`k_heap_array_get` * I2C diff --git a/include/zephyr/kernel.h b/include/zephyr/kernel.h index e8f627833bf..dc8f1fb130d 100644 --- a/include/zephyr/kernel.h +++ b/include/zephyr/kernel.h @@ -5854,6 +5854,17 @@ void k_heap_free(struct k_heap *h, void *mem) __attribute_nonnull(1); #define K_HEAP_DEFINE_NOCACHE(name, bytes) \ Z_HEAP_DEFINE_IN_SECT(name, bytes, __nocache) +/** @brief Get the array of statically defined heaps + * + * Returns the pointer to the start of the static heap array. + * Static heaps are those declared through one of the `K_HEAP_DEFINE` + * macros. + * + * @param heap Pointer to location where heap array address is written + * @return Number of static heaps + */ +int k_heap_array_get(struct k_heap **heap); + /** * @} */ diff --git a/kernel/kheap.c b/kernel/kheap.c index 90aa3b0ee1f..97c281513cf 100644 --- a/kernel/kheap.c +++ b/kernel/kheap.c @@ -12,6 +12,17 @@ #include #include +int k_heap_array_get(struct k_heap **heap) +{ + int num; + + /* Pointer to the start of the heap array */ + STRUCT_SECTION_GET(k_heap, 0, heap); + /* Number of statically defined heaps */ + STRUCT_SECTION_COUNT(k_heap, &num); + return num; +} + void k_heap_init(struct k_heap *heap, void *mem, size_t bytes) { z_waitq_init(&heap->wait_q);