/*---------------------------------------------------------------------------- * Name: Retarget.c * Purpose: 'Retarget' layer for target-dependent low level functions * Note(s): *---------------------------------------------------------------------------- * This file is part of the uVision/ARM development tools. * This software may only be used under the terms of a valid, current, * end user licence from KEIL for a compatible version of KEIL software * development tools. Nothing else gives you the right to use this software. * * This software is supplied "AS IS" without warranties of any kind. * * Copyright (c) 2012 Keil - An ARM Company. All rights reserved. *----------------------------------------------------------------------------*/ #include #include #include int SER_PutChar (int c) { return (c); } int SER_GetChar (void) { return (-1); } /*-- GCC - Newlib runtime support --------------------------------------------*/ extern int __HeapBase; extern int __HeapLimit; int _open (const char * path, int flags, ...) { return (-1); } int _close (int fd) { return (-1); } int _lseek (int fd, int ptr, int dir) { return (0); } int __attribute__((weak)) _fstat (int fd, struct stat * st) { memset (st, 0, sizeof (* st)); st->st_mode = S_IFCHR; return (0); } int _isatty (int fd) { return (1); } int _read (int fd, char * ptr, int len) { char c; int i; for (i = 0; i < len; i++) { c = SER_GetChar(); if (c == 0x0D) break; *ptr++ = c; SER_PutChar(c); } return (len - i); } int _write (int fd, char * ptr, int len) { int i; for (i = 0; i < len; i++) SER_PutChar (*ptr++); return (i); } caddr_t _sbrk (int incr) { static char * heap; char * prev_heap; if (heap == NULL) { heap = (char *)&__HeapBase; } prev_heap = heap; if ((heap + incr) > (char *)&__HeapLimit) { errno = ENOMEM; return (caddr_t) -1; } heap += incr; return (caddr_t) prev_heap; }