Mercurial > ~darius > hgwebdir.cgi > stm32test
diff syscalls.c @ 0:c59513fd84fb
Initial commit of STM32 test code.
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Mon, 03 Oct 2011 21:19:15 +1030 |
parents | |
children | 74e9b3baac1e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/syscalls.c Mon Oct 03 21:19:15 2011 +1030 @@ -0,0 +1,120 @@ +/* + * syscalls.c + * + * Created on: 03.12.2009 + * Author: Martin Thomas, 3BSD license + */ + +//#define SBRK_VERBOSE 1 + +#include <stdio.h> +#include <reent.h> +#include <errno.h> +#include <stdlib.h> /* abort */ +#include <sys/types.h> +#include <sys/stat.h> + +#include "comm.h" +#include "stm32f10x.h" /* for _get_PSP() from core_cm3.h*/ + +#undef errno +extern int errno; + +int +_kill(int pid, int sig) { + pid = pid; sig = sig; /* avoid warnings */ + errno = EINVAL; + return -1; +} + +void _exit(int status) { + printf("_exit called with parameter %d\n", status); + 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) { + return (char*) __get_MSP(); + //return (char*) __get_PSP(); +} + +caddr_t +_sbrk(int incr) { + char *prev_heap_end; +#if SBRK_VERBOSE + printf("_sbrk called with incr %d\n", incr); +#endif + if (heap_end == 0) { + heap_end = &_end; + } + prev_heap_end = heap_end; +#if 1 + if (heap_end + incr > get_stack_top()) { + printf("Heap and stack collision\n"); + abort(); + } +#endif + heap_end += incr; + return (caddr_t) prev_heap_end; +} + +int +_close(int file) { + file = file; /* avoid warning */ + return -1; +} + +int +_fstat(int file, struct stat *st) { + file = file; /* avoid warning */ + st->st_mode = S_IFCHR; + return 0; +} + +int +_isatty(int file) { + file = file; /* avoid warning */ + return 1; +} + +int +_lseek(int file, int ptr, int dir) { + file = file; /* avoid warning */ + ptr = ptr; /* avoid warning */ + dir = dir; /* avoid warning */ + return 0; +} + +int +_read(int file, char *ptr, int len) { + file = file; /* avoid warning */ + ptr = ptr; /* avoid warning */ + len = len; /* avoid warning */ + return 0; +} + +int +_write(int file, char *ptr, int len) { + int todo; + + file = file; /* avoid warning */ + for (todo = 0; todo < len; todo++) { + comm_put(*ptr++); + } + return len; +}