Mercurial > ~darius > hgwebdir.cgi > stm32test
view syscalls.c @ 2:274e01fa5a4c
- Do console IO with RX IRQs.
- Init tick counter (unused anyway).
- Handle C-u and C-w.
- Rejig NVIC setup for less duplication.
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Sat, 08 Oct 2011 20:35:34 +1030 |
parents | c59513fd84fb |
children | 74e9b3baac1e |
line wrap: on
line source
/* * 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; }