]> begriffs open source - cmsis-freertos/blob - Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/AtmelFiles/utils/syscalls.c
Update README.md - branch main is now the base branch
[cmsis-freertos] / Demo / CORTEX_A5_SAMA5D2x_Xplained_IAR / AtmelFiles / utils / syscalls.c
1 /* ----------------------------------------------------------------------------
2  *         SAM Software Package License
3  * ----------------------------------------------------------------------------
4  * Copyright (c) 2011, Atmel Corporation
5  *
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  * - Redistributions of source code must retain the above copyright notice,
12  * this list of conditions and the disclaimer below.
13  *
14  * Atmel's name may not be used to endorse or promote products derived from
15  * this software without specific prior written permission.
16  *
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  * ----------------------------------------------------------------------------
28  */
29
30 /**
31   * \file syscalls.c
32   *
33   * Implementation of syscall bindings.
34   *
35   */
36
37 /*----------------------------------------------------------------------------
38  *        Headers
39  *----------------------------------------------------------------------------*/
40 #include "compiler.h"
41 #include "misc/console.h"
42
43 #ifdef __GNUC__
44
45 #include <stdio.h>
46 #include <stdarg.h>
47 #include <sys/types.h>
48 #include <sys/stat.h>
49
50 /*----------------------------------------------------------------------------
51  *        Imported variables
52  *----------------------------------------------------------------------------*/
53
54 extern int _heap;
55
56 /*----------------------------------------------------------------------------
57  *        Exported functions
58  *----------------------------------------------------------------------------*/
59
60 /* Desactivate stream buffering */
61 CONSTRUCTOR static void _disable_io_buffering(void)
62 {
63         setvbuf(stdout, (char *)NULL, _IONBF, 0);
64 }
65
66 extern caddr_t _sbrk(int incr);
67 caddr_t _sbrk(int incr)
68 {
69         static unsigned char *heap = NULL;
70         unsigned char *prev_heap;
71
72         if (heap == NULL) {
73                 heap = (unsigned char *) &_heap;
74         }
75         prev_heap = heap;
76
77         heap += incr;
78
79         return (caddr_t) prev_heap;
80 }
81
82 extern int _getpid(void);
83 int _getpid(void)
84 {
85         return -1;
86 }
87
88 extern void _kill(int pid, int sig);
89 void _kill(int pid, int sig)
90 {
91         return;
92 }
93
94 extern void _exit(int status);
95 void _exit(int status)
96 {
97         printf("Program terminated with status %d.\n", status);
98         while (1) ;
99 }
100
101 extern int _fstat(int file, struct stat *st);
102 int _fstat(int file, struct stat *st)
103 {
104         st->st_mode = S_IFCHR;
105         return 0;
106 }
107
108 extern int _lseek(int file, int ptr, int dir);
109 int _lseek(int file, int ptr, int dir)
110 {
111         return 0;
112 }
113
114 extern int _isatty(int file);
115 int _isatty(int file)
116 {
117         return 1;
118 }
119
120 extern int _read(int file, char *ptr, int len);
121 int _read(int file, char *ptr, int len)
122 {
123         return 0;
124 }
125
126 extern int _write(int file, char *ptr, int len);
127 int _write(int file, char *ptr, int len)
128 {
129         int i;
130
131         for (i = 0; i < len; i++, ptr++) {
132                 console_put_char(*ptr);
133         }
134
135         return i;
136 }
137
138 extern int _close(int file);
139 int _close(int file)
140 {
141         return -1;
142 }
143
144 #elif defined __ICCARM__  /* IAR Ewarm 5.41+ */
145
146 /**
147  * \brief Outputs a character on the DBGU.
148  *
149  * \param c  Character to output.
150  *
151  * \return The character that was output.
152  */
153 WEAK int putchar(int c)
154 {
155         console_put_char(c);
156         return c;
157 }
158
159 #endif  /* defined __ICCARM__ */