Fix GCC _sbrk allocation

pull/9571/head
Deepika 2019-02-10 18:26:34 -06:00 committed by deepikabhavnani
parent b36147fbe9
commit f13a3e32b6
2 changed files with 7 additions and 6 deletions

View File

@ -1245,16 +1245,17 @@ extern "C" int errno;
// Weak attribute allows user to override, e.g. to use external RAM for dynamic memory. // Weak attribute allows user to override, e.g. to use external RAM for dynamic memory.
extern "C" WEAK caddr_t _sbrk(int incr) extern "C" WEAK caddr_t _sbrk(int incr)
{ {
static unsigned char *heap = (unsigned char *) &__end__; static uint32_t heap = (uint32_t) &__end__;
unsigned char *prev_heap = heap; uint32_t prev_heap = heap;
unsigned char *new_heap = heap + incr; uint32_t new_heap = heap + incr;
/* __HeapLimit is end of heap section */ /* __HeapLimit is end of heap section */
if (new_heap >= (unsigned char *) &__HeapLimit) { if (new_heap >= (uint32_t) &__HeapLimit) {
errno = ENOMEM; errno = ENOMEM;
return (caddr_t) -1; return (caddr_t) -1;
} }
heap = new_heap;
return (caddr_t) prev_heap; return (caddr_t) prev_heap;
} }
#endif #endif

View File

@ -44,9 +44,9 @@ extern void __libc_init_array(void);
void software_init_hook(void) void software_init_hook(void)
{ {
mbed_stack_isr_start = (unsigned char *) &__StackLimit; mbed_stack_isr_start = (unsigned char *) &__StackLimit;
mbed_stack_isr_size = ((uint32_t)((uint32_t) &__StackTop - (uint32_t) &__StackLimit)); mbed_stack_isr_size = (uint32_t) &__StackTop - (uint32_t) &__StackLimit;
mbed_heap_start = (unsigned char *) &__end__; mbed_heap_start = (unsigned char *) &__end__;
mbed_heap_size = ((uint32_t)((uint32_t) &__HeapLimit - (uint32_t) &__end__)); mbed_heap_size = (uint32_t) &__HeapLimit - (uint32_t) &__end__;
mbed_init(); mbed_init();
mbed_rtos_start(); mbed_rtos_start();