| /*---------------------------------------------------------------------------- |
| * 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 <sys/stat.h> |
| #include <string.h> |
| #include <errno.h> |
| |
| 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; |
| } |