Skip to content

Commit 875cc5d

Browse files
authored
Fix heap get for split heap (#416)
* when split_heap, add 2nd heap size for total heap * add mbed_heap_size_total var
1 parent 190b27a commit 875cc5d

File tree

5 files changed

+12
-2
lines changed

5 files changed

+12
-2
lines changed

cmsis/device/rtos/TOOLCHAIN_GCC_ARM/mbed_boot_gcc_arm.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,13 @@ void software_init_hook(void)
6060
mbed_heap_size = (uint32_t) &__mbed_krbs_start - (uint32_t) &__mbed_sbrk_start;
6161
mbed_heap_start_0 = (unsigned char *) &__mbed_sbrk_start_0;
6262
mbed_heap_size_0 = (uint32_t) &__mbed_krbs_start_0 - (uint32_t) &__mbed_sbrk_start_0;
63+
64+
mbed_heap_size_total = mbed_heap_size + mbed_heap_size_0;
6365
#else
6466
mbed_heap_start = (unsigned char *) &__end__;
6567
mbed_heap_size = (uint32_t) &__HeapLimit - (uint32_t) &__end__;
68+
69+
mbed_heap_size_total = mbed_heap_size;
6670
#endif
6771

6872
mbed_init();

cmsis/device/rtos/include/mbed_boot.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ extern "C" {
5757
/* Heap limits - only used if set */
5858
extern unsigned char *mbed_heap_start;
5959
extern uint32_t mbed_heap_size;
60+
extern uint32_t mbed_heap_size_total;
6061

6162
#if defined(MBED_SPLIT_HEAP)
6263
extern unsigned char *mbed_heap_start_0;

platform/source/mbed_alloc_wrappers.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ static int get_malloc_block_total_size(void *ptr)
7373
void mbed_stats_heap_get(mbed_stats_heap_t *stats)
7474
{
7575
#if MBED_HEAP_STATS_ENABLED
76-
extern uint32_t mbed_heap_size;
77-
heap_stats.reserved_size = mbed_heap_size;
76+
extern uint32_t mbed_heap_size_total;
77+
heap_stats.reserved_size = mbed_heap_size_total;
7878

7979
malloc_stats_mutex->lock();
8080
memcpy(stats, &heap_stats, sizeof(mbed_stats_heap_t));

platform/source/mbed_retarget.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ extern const char __stderr_name[] = "/stderr";
119119

120120
unsigned char *mbed_heap_start = 0;
121121
uint32_t mbed_heap_size = 0;
122+
uint32_t mbed_heap_size_total = 0;
122123

123124
#if defined(MBED_SPLIT_HEAP)
124125
unsigned char *mbed_heap_start_0 = 0;

platform/source/mbed_sdk_boot.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,13 @@ void software_init_hook(void)
174174
mbed_heap_size = (uint32_t) &__mbed_krbs_start - (uint32_t) &__mbed_sbrk_start;
175175
mbed_heap_start_0 = (unsigned char *) &__mbed_sbrk_start_0;
176176
mbed_heap_size_0 = (uint32_t) &__mbed_krbs_start_0 - (uint32_t) &__mbed_sbrk_start_0;
177+
178+
mbed_heap_size_total = mbed_heap_size + mbed_heap_size_0;
177179
#else
178180
mbed_heap_start = (unsigned char *) &__end__;
179181
mbed_heap_size = (uint32_t) &__HeapLimit - (uint32_t) &__end__;
182+
183+
mbed_heap_size_total = mbed_heap_size;
180184
#endif
181185

182186
mbed_init();

0 commit comments

Comments
 (0)