blob: e831d3826fee78f96d663e0357b3b558d0dca4ec (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#include <reent.h>
#include <errno.h>
#include <stdlib.h>
#include <FreeRTOS.h>
#include <task.h>
#include <semphr.h>
#include <mpu_wrappers.h>
#include "osdebug.h"
extern uintptr_t __heap_start;
extern uintptr_t __stack_start;
static void * heap_end = (void *) &__heap_start;
void * sbrk(ptrdiff_t incr) {
void *prev_heap_end, *next_heap_end, *ret;
void *stack_min = (void *) &__stack_start;
prev_heap_end = heap_end;
/* Align to always be on 8-byte boundaries */
next_heap_end = (void *)((((uintptr_t)heap_end + incr) + 7) & ~7);
/* Check if this allocation would exceed the end of the ram - would probably get into the stack first however */
if (next_heap_end > stack_min) {
set_errno(ENOMEM);
ret = NULL;
} else {
heap_end = next_heap_end;
ret = (void *)prev_heap_end;
}
return ret;
}
|