/* * syscalls.c * * Created on: 03.12.2009 * Author: Martin Thomas, 3BSD license */ #include #include #include /* abort */ #include #include #include #include #include "usbd_cdc_vcp.h" #include "board.h" #undef errno extern int errno; /* cppcheck-suppress unusedFunction */ int _kill(int pid, int sig) { errno = EINVAL; return -1; } void _exit(int status) { #if 0 // TODO: redirect xprintf xprintf("_exit called with parameter %d\n", status); #endif while(1) {;} } int _getpid(void) { return 1; } extern char _end; /* Defined by the linker */ static char *heap_end; char* get_heap_end(void) { return (char*) heap_end; } char* get_stack_top(void) { // uint32_t result=0; return (char*) __get_MSP(); // return (char*) __get_PSP(); } caddr_t _sbrk(int incr) { char *prev_heap_end; if (heap_end == 0) { heap_end = &_end; } prev_heap_end = heap_end; #if 1 if (heap_end + incr > get_stack_top()) { #if 0 // TODO: redirect xprintf xprintf("Heap and stack collision\n"); #endif abort(); } #endif heap_end += incr; return (caddr_t) prev_heap_end; } int _close(int file) { return -1; } int _fstat(int file, struct stat *st) { st->st_mode = S_IFCHR; return 0; } int _isatty(int file) { return 1; } int _lseek(int file, int ptr, int dir) { return 0; } int _read(int file, char *ptr, int len) { return 0; } int _write(int file, char *ptr, int len) { return len; }