blob: 876ce8c2fab4331895cbb3a077d7b1e13e5657c7 [file] [log] [blame]
/*----------------------------------------------------------------------------
* 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;
}