diff --git a/components/heap/port/esp8266/esp_heap_init.c b/components/heap/port/esp8266/esp_heap_init.c index a7250dcc..ddd890e4 100644 --- a/components/heap/port/esp8266/esp_heap_init.c +++ b/components/heap/port/esp8266/esp_heap_init.c @@ -13,12 +13,23 @@ // limitations under the License. #include "esp_heap_caps.h" +#include "esp_attr.h" #define HEAP_REGION_IRAM_MIN 512 #define HEAP_REGION_IRAM_MAX 0x00010000 heap_region_t g_heap_region[HEAP_REGIONS_MAX]; +size_t IRAM_ATTR heap_caps_get_dram_free_size(void) +{ +#ifndef CONFIG_HEAP_DISABLE_IRAM + extern size_t g_heap_region_num; + + return g_heap_region[g_heap_region_num - 1].free_bytes; +#else + return g_heap_region[0].free_bytes; +#endif +} /** * @brief Initialize the capability-aware heap allocator. diff --git a/components/heap/port/esp8266/include/esp_heap_port.h b/components/heap/port/esp8266/include/esp_heap_port.h index d820a6c4..bfeb7c62 100644 --- a/components/heap/port/esp8266/include/esp_heap_port.h +++ b/components/heap/port/esp8266/include/esp_heap_port.h @@ -14,6 +14,12 @@ #pragma once +#include + +#ifdef __cplusplus +extern "C" { +#endif + #define _heap_caps_lock(_num) \ { \ extern void vPortETSIntrLock(void); \ @@ -32,3 +38,13 @@ esp_task_wdt_reset(); \ } +/** + * @brief Get the total free size of DRAM region + * + * @return Amount of free bytes in DRAM region + */ +size_t heap_caps_get_dram_free_size(void); + +#ifdef __cplusplus +} +#endif