mirror of https://github.com/ARMmbed/mbed-os.git
commit
8688b183a9
|
@ -1268,7 +1268,7 @@ extern "C" WEAK void __cxa_pure_virtual(void)
|
|||
extern uint32_t __mbed_sbrk_start;
|
||||
extern uint32_t __mbed_krbs_start;
|
||||
/* Additional RAM memory used for heap - please note this
|
||||
* address should be lower address then the previous default address
|
||||
* address must be lower address then the previous default address
|
||||
*/
|
||||
extern uint32_t __mbed_sbrk_start_0;
|
||||
extern uint32_t __mbed_krbs_start_0;
|
||||
|
@ -1276,19 +1276,18 @@ extern uint32_t __mbed_krbs_start_0;
|
|||
extern "C" WEAK caddr_t _sbrk(int incr)
|
||||
{
|
||||
static uint32_t heap = (uint32_t) &__mbed_sbrk_start_0;
|
||||
static bool once = true;
|
||||
uint32_t prev_heap = heap;
|
||||
uint32_t new_heap = heap + incr;
|
||||
|
||||
/**
|
||||
* If the new address is outside the first region, start allocating from the second region.
|
||||
* Jump to second region is done just once, and `static bool once` is used to keep track of that.
|
||||
* If we exceed the first region, start allocating from the second region.
|
||||
*/
|
||||
if (once && (new_heap > (uint32_t) &__mbed_krbs_start_0)) {
|
||||
once = false;
|
||||
if (prev_heap <= (uint32_t) &__mbed_krbs_start_0 && new_heap > (uint32_t) &__mbed_krbs_start_0) {
|
||||
prev_heap = (uint32_t) &__mbed_sbrk_start;
|
||||
new_heap = prev_heap + incr;
|
||||
} else if (new_heap > (uint32_t) &__mbed_krbs_start) {
|
||||
}
|
||||
|
||||
if (new_heap > (uint32_t) &__mbed_krbs_start) {
|
||||
/**
|
||||
* If the new address is outside the second region, return out-of-memory.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue