]> git.sur5r.net Git - freertos/blob - Demo/ARM7_LPC2368_Eclipse/RTOSDemo/syscalls.c
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / ARM7_LPC2368_Eclipse / RTOSDemo / syscalls.c
1 /****************************************************************************
2 *  Copyright (c) 2009 by Michael Fischer. All rights reserved.
3 *
4 *  Redistribution and use in source and binary forms, with or without 
5 *  modification, are permitted provided that the following conditions 
6 *  are met:
7 *  
8 *  1. Redistributions of source code must retain the above copyright 
9 *     notice, this list of conditions and the following disclaimer.
10 *  2. Redistributions in binary form must reproduce the above copyright
11 *     notice, this list of conditions and the following disclaimer in the 
12 *     documentation and/or other materials provided with the distribution.
13 *  3. Neither the name of the author nor the names of its contributors may 
14 *     be used to endorse or promote products derived from this software 
15 *     without specific prior written permission.
16 *
17 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
18 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
19 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
20 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 
21 *  THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
22 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
23 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
24 *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
25 *  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
26 *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 
27 *  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
28 *  SUCH DAMAGE.
29 *
30 ****************************************************************************
31 *  History:
32 *
33 *  28.03.09  mifi   First Version, based on the original syscall.c from
34 *                   newlib version 1.17.0
35 ****************************************************************************/
36
37 #include <stdlib.h>
38 #include <errno.h>
39 #include <string.h>
40 #include <sys/stat.h>
41 #include <sys/types.h>
42
43 /***************************************************************************/
44
45 int _read_r (struct _reent *r, int file, char * ptr, int len)
46 {
47   r = r;
48   file = file;
49   ptr = ptr;
50   len = len;
51   
52   errno = EINVAL;
53   return -1;
54 }
55
56 /***************************************************************************/
57
58 int _lseek_r (struct _reent *r, int file, int ptr, int dir)
59 {
60   r = r;
61   file = file;
62   ptr = ptr;
63   dir = dir;
64   
65   return 0;
66 }
67
68 /***************************************************************************/
69
70 int _write_r (struct _reent *r, int file, char * ptr, int len)
71 {  
72   r = r;
73   file = file;
74   ptr = ptr;
75
76 #if 0
77   int index;
78   
79   /* For example, output string by UART */
80   for(index=0; index<len; index++)
81   {
82     if (ptr[index] == '\n')
83     {
84       uart_putc('\r');
85     }  
86
87     uart_putc(ptr[index]);
88   }  
89 #endif   
90   
91   return len;
92 }
93
94 /***************************************************************************/
95
96 int _close_r (struct _reent *r, int file)
97 {
98   return 0;
99 }
100
101 /***************************************************************************/
102
103 /* Register name faking - works in collusion with the linker.  */
104 register char * stack_ptr __asm ("sp");
105
106 caddr_t _sbrk_r (struct _reent *r, int incr)
107 {
108   extern char   end __asm ("end"); /* Defined by the linker.  */
109   static char * heap_end;
110   char *        prev_heap_end;
111
112   if (heap_end == NULL)
113     heap_end = & end;
114   
115   prev_heap_end = heap_end;
116   
117   if (heap_end + incr > stack_ptr)
118   {
119       /* Some of the libstdc++-v3 tests rely upon detecting
120         out of memory errors, so do not abort here.  */
121 #if 0
122       extern void abort (void);
123
124       _write (1, "_sbrk: Heap and stack collision\n", 32);
125       
126       abort ();
127 #else
128       errno = ENOMEM;
129       return (caddr_t) -1;
130 #endif
131   }
132   
133   heap_end += incr;
134
135   return (caddr_t) prev_heap_end;
136 }
137
138 /***************************************************************************/
139
140 int _fstat_r (struct _reent *r, int file, struct stat * st)
141 {
142   r = r; 
143   file = file;
144    
145   memset (st, 0, sizeof (* st));
146   st->st_mode = S_IFCHR;
147   return 0;
148 }
149
150 /***************************************************************************/
151
152 int _isatty_r(struct _reent *r, int fd)
153 {
154   r = r;
155   fd = fd;
156    
157   return 1;
158 }
159
160 /*** EOF ***/
161
162