[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:
@@ -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;
|
||||
}
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user