diff --git a/syscalls/syscalls.c b/syscalls/syscalls.c new file mode 100644 index 0000000..365adc2 --- /dev/null +++ b/syscalls/syscalls.c @@ -0,0 +1,113 @@ +/**************************************************************************//***** + * @file stdio.c + * @brief Implementation of newlib syscall + ********************************************************************************/ + +#include +#include +#include +#include + +#undef errno +extern int errno; +extern int _end; + +/*This function is used for handle heap option*/ +__attribute__ ((used)) +caddr_t _sbrk ( int incr ) +{ + static unsigned char *heap = NULL; + unsigned char *prev_heap; + + if (heap == NULL) { + heap = (unsigned char *)&_end; + } + prev_heap = heap; + + heap += incr; + + return (caddr_t) prev_heap; +} + +__attribute__ ((used)) +int link(char *old, char *new) +{ + return -1; +} + +__attribute__ ((used)) +int _close(int file) +{ + return -1; +} + +__attribute__ ((used)) +int _fstat(int file, struct stat *st) +{ + st->st_mode = S_IFCHR; + return 0; +} + +__attribute__ ((used)) +int _isatty(int file) +{ + return 1; +} + +__attribute__ ((used)) +int _lseek(int file, int ptr, int dir) +{ + return 0; +} + +/*Low layer read(input) function*/ +__attribute__ ((used)) +int _read(int file, char *ptr, int len) +{ + +#if 0 + //user code example + int i; + (void)file; + + for(i = 0; i < len; i++) + { + // UART_GetChar is user's basic input function + *ptr++ = UART_GetChar(); + } + +#endif + + return len; +} + + +/*Low layer write(output) function*/ +__attribute__ ((used)) +int _write(int file, char *ptr, int len) +{ + +#if 0 + //user code example + + int i; + (void)file; + + for(i = 0; i < len; i++) + { + // UART_PutChar is user's basic output function + UART_PutChar(*ptr++); + } +#endif + + return len; +} + +__attribute__ ((used)) +void abort(void) +{ + /* Abort called */ + while(1); +} + +/* --------------------------------- End Of File ------------------------------ */