17dc86dfdSMatthias Ringwald /*********************************************************************
2779af47bSMatthias Ringwald * SEGGER Microcontroller GmbH *
3*ce6f85e7SMatthias Ringwald * The Embedded Experts *
47dc86dfdSMatthias Ringwald **********************************************************************
57dc86dfdSMatthias Ringwald * *
6*ce6f85e7SMatthias Ringwald * (c) 1995 - 2019 SEGGER Microcontroller GmbH *
77dc86dfdSMatthias Ringwald * *
87dc86dfdSMatthias Ringwald * www.segger.com Support: [email protected] *
97dc86dfdSMatthias Ringwald * *
107dc86dfdSMatthias Ringwald **********************************************************************
117dc86dfdSMatthias Ringwald * *
127dc86dfdSMatthias Ringwald * SEGGER RTT * Real Time Transfer for embedded targets *
137dc86dfdSMatthias Ringwald * *
147dc86dfdSMatthias Ringwald **********************************************************************
157dc86dfdSMatthias Ringwald * *
167dc86dfdSMatthias Ringwald * All rights reserved. *
177dc86dfdSMatthias Ringwald * *
187dc86dfdSMatthias Ringwald * SEGGER strongly recommends to not make any changes *
197dc86dfdSMatthias Ringwald * to or modify the source code of this software in order to stay *
207dc86dfdSMatthias Ringwald * compatible with the RTT protocol and J-Link. *
217dc86dfdSMatthias Ringwald * *
227dc86dfdSMatthias Ringwald * Redistribution and use in source and binary forms, with or *
237dc86dfdSMatthias Ringwald * without modification, are permitted provided that the following *
24*ce6f85e7SMatthias Ringwald * condition is met: *
257dc86dfdSMatthias Ringwald * *
267dc86dfdSMatthias Ringwald * o Redistributions of source code must retain the above copyright *
27*ce6f85e7SMatthias Ringwald * notice, this condition and the following disclaimer. *
287dc86dfdSMatthias Ringwald * *
297dc86dfdSMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
307dc86dfdSMatthias Ringwald * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
317dc86dfdSMatthias Ringwald * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
327dc86dfdSMatthias Ringwald * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
337dc86dfdSMatthias Ringwald * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
347dc86dfdSMatthias Ringwald * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
357dc86dfdSMatthias Ringwald * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
367dc86dfdSMatthias Ringwald * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
377dc86dfdSMatthias Ringwald * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
387dc86dfdSMatthias Ringwald * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
397dc86dfdSMatthias Ringwald * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
407dc86dfdSMatthias Ringwald * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
417dc86dfdSMatthias Ringwald * DAMAGE. *
427dc86dfdSMatthias Ringwald * *
437dc86dfdSMatthias Ringwald **********************************************************************
447dc86dfdSMatthias Ringwald ---------------------------END-OF-HEADER------------------------------
457dc86dfdSMatthias Ringwald File : RTT_Syscalls_KEIL.c
467dc86dfdSMatthias Ringwald Purpose : Retargeting module for KEIL MDK-CM3.
477dc86dfdSMatthias Ringwald Low-level functions for using printf() via RTT
48*ce6f85e7SMatthias Ringwald Revision: $Rev: 24316 $
49*ce6f85e7SMatthias Ringwald Notes : (1) https://wiki.segger.com/Keil_MDK-ARM#RTT_in_uVision
507dc86dfdSMatthias Ringwald ----------------------------------------------------------------------
517dc86dfdSMatthias Ringwald */
52*ce6f85e7SMatthias Ringwald #if (defined __CC_ARM) || (defined __ARMCC_VERSION)
537dc86dfdSMatthias Ringwald
547dc86dfdSMatthias Ringwald #include <stdio.h>
557dc86dfdSMatthias Ringwald #include <stdlib.h>
567dc86dfdSMatthias Ringwald #include <string.h>
577dc86dfdSMatthias Ringwald #include <rt_sys.h>
587dc86dfdSMatthias Ringwald #include <rt_misc.h>
597dc86dfdSMatthias Ringwald
607dc86dfdSMatthias Ringwald #include "SEGGER_RTT.h"
617dc86dfdSMatthias Ringwald /*********************************************************************
627dc86dfdSMatthias Ringwald *
637dc86dfdSMatthias Ringwald * #pragmas
647dc86dfdSMatthias Ringwald *
657dc86dfdSMatthias Ringwald **********************************************************************
667dc86dfdSMatthias Ringwald */
67*ce6f85e7SMatthias Ringwald #if __ARMCC_VERSION < 6000000
687dc86dfdSMatthias Ringwald #pragma import(__use_no_semihosting)
69*ce6f85e7SMatthias Ringwald #endif
707dc86dfdSMatthias Ringwald
717dc86dfdSMatthias Ringwald #ifdef _MICROLIB
727dc86dfdSMatthias Ringwald #pragma import(__use_full_stdio)
737dc86dfdSMatthias Ringwald #endif
747dc86dfdSMatthias Ringwald
757dc86dfdSMatthias Ringwald /*********************************************************************
767dc86dfdSMatthias Ringwald *
777dc86dfdSMatthias Ringwald * Defines non-configurable
787dc86dfdSMatthias Ringwald *
797dc86dfdSMatthias Ringwald **********************************************************************
807dc86dfdSMatthias Ringwald */
817dc86dfdSMatthias Ringwald
827dc86dfdSMatthias Ringwald /* Standard IO device handles - arbitrary, but any real file system handles must be
837dc86dfdSMatthias Ringwald less than 0x8000. */
847dc86dfdSMatthias Ringwald #define STDIN 0x8001 // Standard Input Stream
857dc86dfdSMatthias Ringwald #define STDOUT 0x8002 // Standard Output Stream
867dc86dfdSMatthias Ringwald #define STDERR 0x8003 // Standard Error Stream
877dc86dfdSMatthias Ringwald
887dc86dfdSMatthias Ringwald /*********************************************************************
897dc86dfdSMatthias Ringwald *
907dc86dfdSMatthias Ringwald * Public const
917dc86dfdSMatthias Ringwald *
927dc86dfdSMatthias Ringwald **********************************************************************
937dc86dfdSMatthias Ringwald */
94*ce6f85e7SMatthias Ringwald #if __ARMCC_VERSION < 5000000
957dc86dfdSMatthias Ringwald //const char __stdin_name[] = "STDIN";
967dc86dfdSMatthias Ringwald const char __stdout_name[] = "STDOUT";
977dc86dfdSMatthias Ringwald const char __stderr_name[] = "STDERR";
98*ce6f85e7SMatthias Ringwald #endif
997dc86dfdSMatthias Ringwald
1007dc86dfdSMatthias Ringwald /*********************************************************************
1017dc86dfdSMatthias Ringwald *
1027dc86dfdSMatthias Ringwald * Public code
1037dc86dfdSMatthias Ringwald *
1047dc86dfdSMatthias Ringwald **********************************************************************
1057dc86dfdSMatthias Ringwald */
1067dc86dfdSMatthias Ringwald
1077dc86dfdSMatthias Ringwald /*********************************************************************
1087dc86dfdSMatthias Ringwald *
1097dc86dfdSMatthias Ringwald * _ttywrch
1107dc86dfdSMatthias Ringwald *
1117dc86dfdSMatthias Ringwald * Function description:
1127dc86dfdSMatthias Ringwald * Outputs a character to the console
1137dc86dfdSMatthias Ringwald *
1147dc86dfdSMatthias Ringwald * Parameters:
1157dc86dfdSMatthias Ringwald * c - character to output
1167dc86dfdSMatthias Ringwald *
1177dc86dfdSMatthias Ringwald */
_ttywrch(int c)1187dc86dfdSMatthias Ringwald void _ttywrch(int c) {
1197dc86dfdSMatthias Ringwald fputc(c, stdout); // stdout
1207dc86dfdSMatthias Ringwald fflush(stdout);
1217dc86dfdSMatthias Ringwald }
1227dc86dfdSMatthias Ringwald
1237dc86dfdSMatthias Ringwald /*********************************************************************
1247dc86dfdSMatthias Ringwald *
1257dc86dfdSMatthias Ringwald * _sys_open
1267dc86dfdSMatthias Ringwald *
1277dc86dfdSMatthias Ringwald * Function description:
1287dc86dfdSMatthias Ringwald * Opens the device/file in order to do read/write operations
1297dc86dfdSMatthias Ringwald *
1307dc86dfdSMatthias Ringwald * Parameters:
1317dc86dfdSMatthias Ringwald * sName - sName of the device/file to open
1327dc86dfdSMatthias Ringwald * OpenMode - This parameter is currently ignored
1337dc86dfdSMatthias Ringwald *
1347dc86dfdSMatthias Ringwald * Return value:
1357dc86dfdSMatthias Ringwald * != 0 - Handle to the object to open, otherwise
1367dc86dfdSMatthias Ringwald * == 0 -"device" is not handled by this module
1377dc86dfdSMatthias Ringwald *
1387dc86dfdSMatthias Ringwald */
_sys_open(const char * sName,int OpenMode)1397dc86dfdSMatthias Ringwald FILEHANDLE _sys_open(const char * sName, int OpenMode) {
1407dc86dfdSMatthias Ringwald (void)OpenMode;
1417dc86dfdSMatthias Ringwald // Register standard Input Output devices.
1427dc86dfdSMatthias Ringwald if (strcmp(sName, __stdout_name) == 0) {
1437dc86dfdSMatthias Ringwald return (STDOUT);
1447dc86dfdSMatthias Ringwald } else if (strcmp(sName, __stderr_name) == 0) {
1457dc86dfdSMatthias Ringwald return (STDERR);
1467dc86dfdSMatthias Ringwald } else
1477dc86dfdSMatthias Ringwald return (0); // Not implemented
1487dc86dfdSMatthias Ringwald }
1497dc86dfdSMatthias Ringwald
1507dc86dfdSMatthias Ringwald /*********************************************************************
1517dc86dfdSMatthias Ringwald *
1527dc86dfdSMatthias Ringwald * _sys_close
1537dc86dfdSMatthias Ringwald *
1547dc86dfdSMatthias Ringwald * Function description:
1557dc86dfdSMatthias Ringwald * Closes the handle to the open device/file
1567dc86dfdSMatthias Ringwald *
1577dc86dfdSMatthias Ringwald * Parameters:
1587dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open
1597dc86dfdSMatthias Ringwald *
1607dc86dfdSMatthias Ringwald * Return value:
1617dc86dfdSMatthias Ringwald * 0 - device/file closed
1627dc86dfdSMatthias Ringwald *
1637dc86dfdSMatthias Ringwald */
_sys_close(FILEHANDLE hFile)1647dc86dfdSMatthias Ringwald int _sys_close(FILEHANDLE hFile) {
1657dc86dfdSMatthias Ringwald (void)hFile;
1667dc86dfdSMatthias Ringwald return 0; // Not implemented
1677dc86dfdSMatthias Ringwald }
1687dc86dfdSMatthias Ringwald
1697dc86dfdSMatthias Ringwald /*********************************************************************
1707dc86dfdSMatthias Ringwald *
1717dc86dfdSMatthias Ringwald * _sys_write
1727dc86dfdSMatthias Ringwald *
1737dc86dfdSMatthias Ringwald * Function description:
1747dc86dfdSMatthias Ringwald * Writes the data to an open handle.
1757dc86dfdSMatthias Ringwald * Currently this function only outputs data to the console
1767dc86dfdSMatthias Ringwald *
1777dc86dfdSMatthias Ringwald * Parameters:
1787dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open
1797dc86dfdSMatthias Ringwald * pBuffer - Pointer to the data that shall be written
1807dc86dfdSMatthias Ringwald * NumBytes - Number of bytes to write
1817dc86dfdSMatthias Ringwald * Mode - The Mode that shall be used
1827dc86dfdSMatthias Ringwald *
1837dc86dfdSMatthias Ringwald * Return value:
1847dc86dfdSMatthias Ringwald * Number of bytes *not* written to the file/device
1857dc86dfdSMatthias Ringwald *
1867dc86dfdSMatthias Ringwald */
_sys_write(FILEHANDLE hFile,const unsigned char * pBuffer,unsigned NumBytes,int Mode)1877dc86dfdSMatthias Ringwald int _sys_write(FILEHANDLE hFile, const unsigned char * pBuffer, unsigned NumBytes, int Mode) {
1887dc86dfdSMatthias Ringwald int r = 0;
1897dc86dfdSMatthias Ringwald
1907dc86dfdSMatthias Ringwald (void)Mode;
1917dc86dfdSMatthias Ringwald if (hFile == STDOUT) {
192*ce6f85e7SMatthias Ringwald SEGGER_RTT_Write(0, (const char*)pBuffer, NumBytes);
193*ce6f85e7SMatthias Ringwald return 0;
1947dc86dfdSMatthias Ringwald }
1957dc86dfdSMatthias Ringwald return r;
1967dc86dfdSMatthias Ringwald }
1977dc86dfdSMatthias Ringwald
1987dc86dfdSMatthias Ringwald /*********************************************************************
1997dc86dfdSMatthias Ringwald *
2007dc86dfdSMatthias Ringwald * _sys_read
2017dc86dfdSMatthias Ringwald *
2027dc86dfdSMatthias Ringwald * Function description:
2037dc86dfdSMatthias Ringwald * Reads data from an open handle.
2047dc86dfdSMatthias Ringwald * Currently this modules does nothing.
2057dc86dfdSMatthias Ringwald *
2067dc86dfdSMatthias Ringwald * Parameters:
2077dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open
2087dc86dfdSMatthias Ringwald * pBuffer - Pointer to buffer to store the read data
2097dc86dfdSMatthias Ringwald * NumBytes - Number of bytes to read
2107dc86dfdSMatthias Ringwald * Mode - The Mode that shall be used
2117dc86dfdSMatthias Ringwald *
2127dc86dfdSMatthias Ringwald * Return value:
2137dc86dfdSMatthias Ringwald * Number of bytes read from the file/device
2147dc86dfdSMatthias Ringwald *
2157dc86dfdSMatthias Ringwald */
_sys_read(FILEHANDLE hFile,unsigned char * pBuffer,unsigned NumBytes,int Mode)2167dc86dfdSMatthias Ringwald int _sys_read(FILEHANDLE hFile, unsigned char * pBuffer, unsigned NumBytes, int Mode) {
2177dc86dfdSMatthias Ringwald (void)hFile;
2187dc86dfdSMatthias Ringwald (void)pBuffer;
2197dc86dfdSMatthias Ringwald (void)NumBytes;
2207dc86dfdSMatthias Ringwald (void)Mode;
2217dc86dfdSMatthias Ringwald return (0); // Not implemented
2227dc86dfdSMatthias Ringwald }
2237dc86dfdSMatthias Ringwald
2247dc86dfdSMatthias Ringwald /*********************************************************************
2257dc86dfdSMatthias Ringwald *
2267dc86dfdSMatthias Ringwald * _sys_istty
2277dc86dfdSMatthias Ringwald *
2287dc86dfdSMatthias Ringwald * Function description:
2297dc86dfdSMatthias Ringwald * This function shall return whether the opened file
2307dc86dfdSMatthias Ringwald * is a console device or not.
2317dc86dfdSMatthias Ringwald *
2327dc86dfdSMatthias Ringwald * Parameters:
2337dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open
2347dc86dfdSMatthias Ringwald *
2357dc86dfdSMatthias Ringwald * Return value:
2367dc86dfdSMatthias Ringwald * 1 - Device is a console
2377dc86dfdSMatthias Ringwald * 0 - Device is not a console
2387dc86dfdSMatthias Ringwald *
2397dc86dfdSMatthias Ringwald */
_sys_istty(FILEHANDLE hFile)2407dc86dfdSMatthias Ringwald int _sys_istty(FILEHANDLE hFile) {
2417dc86dfdSMatthias Ringwald if (hFile > 0x8000) {
2427dc86dfdSMatthias Ringwald return (1);
2437dc86dfdSMatthias Ringwald }
2447dc86dfdSMatthias Ringwald return (0); // Not implemented
2457dc86dfdSMatthias Ringwald }
2467dc86dfdSMatthias Ringwald
2477dc86dfdSMatthias Ringwald /*********************************************************************
2487dc86dfdSMatthias Ringwald *
2497dc86dfdSMatthias Ringwald * _sys_seek
2507dc86dfdSMatthias Ringwald *
2517dc86dfdSMatthias Ringwald * Function description:
2527dc86dfdSMatthias Ringwald * Seeks via the file to a specific position
2537dc86dfdSMatthias Ringwald *
2547dc86dfdSMatthias Ringwald * Parameters:
2557dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open
2567dc86dfdSMatthias Ringwald * Pos -
2577dc86dfdSMatthias Ringwald *
2587dc86dfdSMatthias Ringwald * Return value:
2597dc86dfdSMatthias Ringwald * int -
2607dc86dfdSMatthias Ringwald *
2617dc86dfdSMatthias Ringwald */
_sys_seek(FILEHANDLE hFile,long Pos)2627dc86dfdSMatthias Ringwald int _sys_seek(FILEHANDLE hFile, long Pos) {
2637dc86dfdSMatthias Ringwald (void)hFile;
2647dc86dfdSMatthias Ringwald (void)Pos;
2657dc86dfdSMatthias Ringwald return (0); // Not implemented
2667dc86dfdSMatthias Ringwald }
2677dc86dfdSMatthias Ringwald
2687dc86dfdSMatthias Ringwald /*********************************************************************
2697dc86dfdSMatthias Ringwald *
2707dc86dfdSMatthias Ringwald * _sys_ensure
2717dc86dfdSMatthias Ringwald *
2727dc86dfdSMatthias Ringwald * Function description:
2737dc86dfdSMatthias Ringwald *
2747dc86dfdSMatthias Ringwald *
2757dc86dfdSMatthias Ringwald * Parameters:
2767dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open
2777dc86dfdSMatthias Ringwald *
2787dc86dfdSMatthias Ringwald * Return value:
2797dc86dfdSMatthias Ringwald * int -
2807dc86dfdSMatthias Ringwald *
2817dc86dfdSMatthias Ringwald */
_sys_ensure(FILEHANDLE hFile)2827dc86dfdSMatthias Ringwald int _sys_ensure(FILEHANDLE hFile) {
2837dc86dfdSMatthias Ringwald (void)hFile;
2847dc86dfdSMatthias Ringwald return (-1); // Not implemented
2857dc86dfdSMatthias Ringwald }
2867dc86dfdSMatthias Ringwald
2877dc86dfdSMatthias Ringwald /*********************************************************************
2887dc86dfdSMatthias Ringwald *
2897dc86dfdSMatthias Ringwald * _sys_flen
2907dc86dfdSMatthias Ringwald *
2917dc86dfdSMatthias Ringwald * Function description:
2927dc86dfdSMatthias Ringwald * Returns the length of the opened file handle
2937dc86dfdSMatthias Ringwald *
2947dc86dfdSMatthias Ringwald * Parameters:
2957dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open
2967dc86dfdSMatthias Ringwald *
2977dc86dfdSMatthias Ringwald * Return value:
2987dc86dfdSMatthias Ringwald * Length of the file
2997dc86dfdSMatthias Ringwald *
3007dc86dfdSMatthias Ringwald */
_sys_flen(FILEHANDLE hFile)3017dc86dfdSMatthias Ringwald long _sys_flen(FILEHANDLE hFile) {
3027dc86dfdSMatthias Ringwald (void)hFile;
3037dc86dfdSMatthias Ringwald return (0); // Not implemented
3047dc86dfdSMatthias Ringwald }
3057dc86dfdSMatthias Ringwald
3067dc86dfdSMatthias Ringwald /*********************************************************************
3077dc86dfdSMatthias Ringwald *
3087dc86dfdSMatthias Ringwald * _sys_tmpnam
3097dc86dfdSMatthias Ringwald *
3107dc86dfdSMatthias Ringwald * Function description:
3117dc86dfdSMatthias Ringwald * This function converts the file number fileno for a temporary
3127dc86dfdSMatthias Ringwald * file to a unique filename, for example, tmp0001.
3137dc86dfdSMatthias Ringwald *
3147dc86dfdSMatthias Ringwald * Parameters:
3157dc86dfdSMatthias Ringwald * pBuffer - Pointer to a buffer to store the name
3167dc86dfdSMatthias Ringwald * FileNum - file number to convert
3177dc86dfdSMatthias Ringwald * MaxLen - Size of the buffer
3187dc86dfdSMatthias Ringwald *
3197dc86dfdSMatthias Ringwald * Return value:
3207dc86dfdSMatthias Ringwald * 1 - Error
3217dc86dfdSMatthias Ringwald * 0 - Success
3227dc86dfdSMatthias Ringwald *
3237dc86dfdSMatthias Ringwald */
_sys_tmpnam(char * pBuffer,int FileNum,unsigned MaxLen)3247dc86dfdSMatthias Ringwald int _sys_tmpnam(char * pBuffer, int FileNum, unsigned MaxLen) {
3257dc86dfdSMatthias Ringwald (void)pBuffer;
3267dc86dfdSMatthias Ringwald (void)FileNum;
3277dc86dfdSMatthias Ringwald (void)MaxLen;
3287dc86dfdSMatthias Ringwald return (1); // Not implemented
3297dc86dfdSMatthias Ringwald }
3307dc86dfdSMatthias Ringwald
3317dc86dfdSMatthias Ringwald /*********************************************************************
3327dc86dfdSMatthias Ringwald *
3337dc86dfdSMatthias Ringwald * _sys_command_string
3347dc86dfdSMatthias Ringwald *
3357dc86dfdSMatthias Ringwald * Function description:
3367dc86dfdSMatthias Ringwald * This function shall execute a system command.
3377dc86dfdSMatthias Ringwald *
3387dc86dfdSMatthias Ringwald * Parameters:
3397dc86dfdSMatthias Ringwald * cmd - Pointer to the command string
3407dc86dfdSMatthias Ringwald * len - Length of the string
3417dc86dfdSMatthias Ringwald *
3427dc86dfdSMatthias Ringwald * Return value:
3437dc86dfdSMatthias Ringwald * == NULL - Command was not successfully executed
3447dc86dfdSMatthias Ringwald * == sCmd - Command was passed successfully
3457dc86dfdSMatthias Ringwald *
3467dc86dfdSMatthias Ringwald */
_sys_command_string(char * cmd,int len)3477dc86dfdSMatthias Ringwald char * _sys_command_string(char * cmd, int len) {
3487dc86dfdSMatthias Ringwald (void)len;
3497dc86dfdSMatthias Ringwald return cmd; // Not implemented
3507dc86dfdSMatthias Ringwald }
3517dc86dfdSMatthias Ringwald
3527dc86dfdSMatthias Ringwald /*********************************************************************
3537dc86dfdSMatthias Ringwald *
3547dc86dfdSMatthias Ringwald * _sys_exit
3557dc86dfdSMatthias Ringwald *
3567dc86dfdSMatthias Ringwald * Function description:
3577dc86dfdSMatthias Ringwald * This function is called when the application returns from main
3587dc86dfdSMatthias Ringwald *
3597dc86dfdSMatthias Ringwald * Parameters:
3607dc86dfdSMatthias Ringwald * ReturnCode - Return code from the main function
3617dc86dfdSMatthias Ringwald *
3627dc86dfdSMatthias Ringwald *
3637dc86dfdSMatthias Ringwald */
_sys_exit(int ReturnCode)3647dc86dfdSMatthias Ringwald void _sys_exit(int ReturnCode) {
3657dc86dfdSMatthias Ringwald (void)ReturnCode;
3667dc86dfdSMatthias Ringwald while (1); // Not implemented
3677dc86dfdSMatthias Ringwald }
3687dc86dfdSMatthias Ringwald
369*ce6f85e7SMatthias Ringwald #if __ARMCC_VERSION >= 5000000
370*ce6f85e7SMatthias Ringwald /*********************************************************************
371*ce6f85e7SMatthias Ringwald *
372*ce6f85e7SMatthias Ringwald * stdout_putchar
373*ce6f85e7SMatthias Ringwald *
374*ce6f85e7SMatthias Ringwald * Function description:
375*ce6f85e7SMatthias Ringwald * Put a character to the stdout
376*ce6f85e7SMatthias Ringwald *
377*ce6f85e7SMatthias Ringwald * Parameters:
378*ce6f85e7SMatthias Ringwald * ch - Character to output
379*ce6f85e7SMatthias Ringwald *
380*ce6f85e7SMatthias Ringwald *
381*ce6f85e7SMatthias Ringwald */
stdout_putchar(int ch)382*ce6f85e7SMatthias Ringwald int stdout_putchar(int ch) {
383*ce6f85e7SMatthias Ringwald (void)ch;
384*ce6f85e7SMatthias Ringwald return ch; // Not implemented
385*ce6f85e7SMatthias Ringwald }
386*ce6f85e7SMatthias Ringwald #endif
387*ce6f85e7SMatthias Ringwald
3887dc86dfdSMatthias Ringwald #endif
3897dc86dfdSMatthias Ringwald /*************************** End of file ****************************/
390