[FL-1609] Redirected malloc, calloc, realloc and free functions from newlib to freertos heap. (#604)

* Core: newlib-nano heap management functions replaced with freertos functions
* Core: replace newlib heap management functions for firmware only, not for bootloader
* Core, Linker: automatically determine available heap size at linking.

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
SG
2021-07-25 22:37:43 +10:00
committed by GitHub
parent 81080a3a8b
commit 653295df6f
8 changed files with 35 additions and 17 deletions

View File

@@ -67,3 +67,22 @@ size_t memmgr_get_free_heap(void) {
size_t memmgr_get_minimum_free_heap(void) {
return xPortGetMinimumEverFreeHeapSize();
}
void* __wrap__malloc_r(struct _reent* r, size_t size) {
void* pointer = malloc(size);
return pointer;
}
void __wrap__free_r(struct _reent* r, void* ptr) {
free(ptr);
}
void* __wrap__calloc_r(struct _reent* r, size_t count, size_t size) {
void* pointer = calloc(count, size);
return pointer;
}
void* __wrap__realloc_r(struct _reent* r, void* ptr, size_t size) {
void* pointer = realloc(ptr, size);
return pointer;
}

View File

@@ -59,14 +59,10 @@ task.h is included from an application file. */
/* Assumes 8bit bytes! */
#define heapBITS_PER_BYTE ((size_t)8)
/* Allocate the memory for the heap. */
#if(configAPPLICATION_ALLOCATED_HEAP == 1)
/* The application writer has already defined the array used for the RTOS
heap - probably so it can be placed in a special segment or address. */
extern uint8_t ucHeap[configTOTAL_HEAP_SIZE];
#else
static uint8_t ucHeap[configTOTAL_HEAP_SIZE];
#endif /* configAPPLICATION_ALLOCATED_HEAP */
/* Heap start end symbols provided by linker */
extern const void __heap_start__;
extern const void __heap_end__;
uint8_t* ucHeap = (uint8_t*)&__heap_start__;
/* Define the linked list structure. This is used to link free blocks in order
of their memory address. */
@@ -421,7 +417,7 @@ static void prvHeapInit(void) {
BlockLink_t* pxFirstFreeBlock;
uint8_t* pucAlignedHeap;
size_t uxAddress;
size_t xTotalHeapSize = configTOTAL_HEAP_SIZE;
size_t xTotalHeapSize = (size_t)&__heap_end__ - (size_t)&__heap_start__;
/* Ensure the heap starts on a correctly aligned boundary. */
uxAddress = (size_t)ucHeap;