diff --git a/components/heap/heap_caps.c b/components/heap/heap_caps.c index 9c7d91a2e..2a9b12a51 100644 --- a/components/heap/heap_caps.c +++ b/components/heap/heap_caps.c @@ -329,6 +329,18 @@ IRAM_ATTR void *heap_caps_calloc( size_t n, size_t size, uint32_t caps) return result; } +size_t heap_caps_get_total_size(uint32_t caps) +{ + size_t total_size = 0; + heap_t *heap; + SLIST_FOREACH(heap, ®istered_heaps, next) { + if (heap_caps_match(heap, caps)) { + total_size += (heap->end - heap->start); + } + } + return total_size; +} + size_t heap_caps_get_free_size( uint32_t caps ) { size_t ret = 0; diff --git a/components/heap/include/esp_heap_caps.h b/components/heap/include/esp_heap_caps.h index 3b7252288..6df13cbf5 100644 --- a/components/heap/include/esp_heap_caps.h +++ b/components/heap/include/esp_heap_caps.h @@ -101,6 +101,20 @@ void *heap_caps_realloc( void *ptr, size_t size, int caps); */ void *heap_caps_calloc(size_t n, size_t size, uint32_t caps); +/** + * @brief Get the total size of all the regions that have the given capabilities + * + * This function takes all regions capable of having the given capabilities allocated in them + * and adds up the total space they have. + * + * @param caps Bitwise OR of MALLOC_CAP_* flags indicating the type + * of memory + * + * @return total size in bytes + */ + +size_t heap_caps_get_total_size(uint32_t caps); + /** * @brief Get the total free size of all the regions that have the given capabilities *