/*! ---------------------------------------------------------------------------- * @file syscalls.c * @brief Standard syscalls platform-specific implementation * * @attention * * Copyright 2015 (c) Decawave Ltd, Dublin, Ireland. * * All rights reserved. * * @author Decawave */ #include #include "port.h" /*! ------------------------------------------------------------------------------------------------------------------ * @fn _sbrk() * * @brief Increment heap pointer to allow dynamic memory allocation. * * @param incr size of the heap increment to perform, in bytes * * @return pointer on the previous heap end or -1 if memory is full and increment cannot be performed. */ caddr_t _sbrk(int incr) { extern char _ebss; /* Defined by the linker. */ static char *heap_end; char *prev_heap_end; char *stack; if (heap_end == 0) { heap_end = &_ebss; } prev_heap_end = heap_end; stack = (char*) port_GET_stack_pointer(); if (heap_end + incr > stack) { return (caddr_t) -1; } heap_end += incr; return (caddr_t) prev_heap_end; }