xref: /btstack/3rd-party/segger-rtt/SEGGER_RTT_Syscalls_GCC.c (revision 7dc86dfd3569d69491d87d64749fd45afb46c67a)
1*7dc86dfdSMatthias Ringwald /*********************************************************************
2*7dc86dfdSMatthias Ringwald *               SEGGER MICROCONTROLLER GmbH & Co. KG                 *
3*7dc86dfdSMatthias Ringwald *       Solutions for real time microcontroller applications         *
4*7dc86dfdSMatthias Ringwald **********************************************************************
5*7dc86dfdSMatthias Ringwald *                                                                    *
6*7dc86dfdSMatthias Ringwald *       (c) 2014 - 2016  SEGGER Microcontroller GmbH & Co. KG        *
7*7dc86dfdSMatthias Ringwald *                                                                    *
8*7dc86dfdSMatthias Ringwald *       www.segger.com     Support: [email protected]               *
9*7dc86dfdSMatthias Ringwald *                                                                    *
10*7dc86dfdSMatthias Ringwald **********************************************************************
11*7dc86dfdSMatthias Ringwald *                                                                    *
12*7dc86dfdSMatthias Ringwald *       SEGGER RTT * Real Time Transfer for embedded targets         *
13*7dc86dfdSMatthias Ringwald *                                                                    *
14*7dc86dfdSMatthias Ringwald **********************************************************************
15*7dc86dfdSMatthias Ringwald *                                                                    *
16*7dc86dfdSMatthias Ringwald * All rights reserved.                                               *
17*7dc86dfdSMatthias Ringwald *                                                                    *
18*7dc86dfdSMatthias Ringwald * SEGGER strongly recommends to not make any changes                 *
19*7dc86dfdSMatthias Ringwald * to or modify the source code of this software in order to stay     *
20*7dc86dfdSMatthias Ringwald * compatible with the RTT protocol and J-Link.                       *
21*7dc86dfdSMatthias Ringwald *                                                                    *
22*7dc86dfdSMatthias Ringwald * Redistribution and use in source and binary forms, with or         *
23*7dc86dfdSMatthias Ringwald * without modification, are permitted provided that the following    *
24*7dc86dfdSMatthias Ringwald * conditions are met:                                                *
25*7dc86dfdSMatthias Ringwald *                                                                    *
26*7dc86dfdSMatthias Ringwald * o Redistributions of source code must retain the above copyright   *
27*7dc86dfdSMatthias Ringwald *   notice, this list of conditions and the following disclaimer.    *
28*7dc86dfdSMatthias Ringwald *                                                                    *
29*7dc86dfdSMatthias Ringwald * o Redistributions in binary form must reproduce the above          *
30*7dc86dfdSMatthias Ringwald *   copyright notice, this list of conditions and the following      *
31*7dc86dfdSMatthias Ringwald *   disclaimer in the documentation and/or other materials provided  *
32*7dc86dfdSMatthias Ringwald *   with the distribution.                                           *
33*7dc86dfdSMatthias Ringwald *                                                                    *
34*7dc86dfdSMatthias Ringwald * o Neither the name of SEGGER Microcontroller GmbH & Co. KG         *
35*7dc86dfdSMatthias Ringwald *   nor the names of its contributors may be used to endorse or      *
36*7dc86dfdSMatthias Ringwald *   promote products derived from this software without specific     *
37*7dc86dfdSMatthias Ringwald *   prior written permission.                                        *
38*7dc86dfdSMatthias Ringwald *                                                                    *
39*7dc86dfdSMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND             *
40*7dc86dfdSMatthias Ringwald * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,        *
41*7dc86dfdSMatthias Ringwald * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF           *
42*7dc86dfdSMatthias Ringwald * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE           *
43*7dc86dfdSMatthias Ringwald * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
44*7dc86dfdSMatthias Ringwald * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR           *
45*7dc86dfdSMatthias Ringwald * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  *
46*7dc86dfdSMatthias Ringwald * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;    *
47*7dc86dfdSMatthias Ringwald * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF      *
48*7dc86dfdSMatthias Ringwald * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT          *
49*7dc86dfdSMatthias Ringwald * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE  *
50*7dc86dfdSMatthias Ringwald * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH   *
51*7dc86dfdSMatthias Ringwald * DAMAGE.                                                            *
52*7dc86dfdSMatthias Ringwald *                                                                    *
53*7dc86dfdSMatthias Ringwald **********************************************************************
54*7dc86dfdSMatthias Ringwald ---------------------------END-OF-HEADER------------------------------
55*7dc86dfdSMatthias Ringwald File    : SEGGER_RTT_Syscalls_GCC.c
56*7dc86dfdSMatthias Ringwald Purpose : Low-level functions for using printf() via RTT in GCC.
57*7dc86dfdSMatthias Ringwald           To use RTT for printf output, include this file in your
58*7dc86dfdSMatthias Ringwald           application.
59*7dc86dfdSMatthias Ringwald Revision: $Rev: 4351 $
60*7dc86dfdSMatthias Ringwald ----------------------------------------------------------------------
61*7dc86dfdSMatthias Ringwald */
62*7dc86dfdSMatthias Ringwald #if (defined __GNUC__) && !(defined __SES_ARM) && !(defined __CROSSWORKS_ARM)
63*7dc86dfdSMatthias Ringwald 
64*7dc86dfdSMatthias Ringwald #include <reent.h>  // required for _write_r
65*7dc86dfdSMatthias Ringwald #include "SEGGER_RTT.h"
66*7dc86dfdSMatthias Ringwald 
67*7dc86dfdSMatthias Ringwald 
68*7dc86dfdSMatthias Ringwald /*********************************************************************
69*7dc86dfdSMatthias Ringwald *
70*7dc86dfdSMatthias Ringwald *       Types
71*7dc86dfdSMatthias Ringwald *
72*7dc86dfdSMatthias Ringwald **********************************************************************
73*7dc86dfdSMatthias Ringwald */
74*7dc86dfdSMatthias Ringwald //
75*7dc86dfdSMatthias Ringwald // If necessary define the _reent struct
76*7dc86dfdSMatthias Ringwald // to match the one passed by the used standard library.
77*7dc86dfdSMatthias Ringwald //
78*7dc86dfdSMatthias Ringwald struct _reent;
79*7dc86dfdSMatthias Ringwald 
80*7dc86dfdSMatthias Ringwald /*********************************************************************
81*7dc86dfdSMatthias Ringwald *
82*7dc86dfdSMatthias Ringwald *       Function prototypes
83*7dc86dfdSMatthias Ringwald *
84*7dc86dfdSMatthias Ringwald **********************************************************************
85*7dc86dfdSMatthias Ringwald */
86*7dc86dfdSMatthias Ringwald int _write(int file, char *ptr, int len);
87*7dc86dfdSMatthias Ringwald int _write_r(struct _reent *r, int file, const void *ptr, int len);
88*7dc86dfdSMatthias Ringwald 
89*7dc86dfdSMatthias Ringwald /*********************************************************************
90*7dc86dfdSMatthias Ringwald *
91*7dc86dfdSMatthias Ringwald *       Global functions
92*7dc86dfdSMatthias Ringwald *
93*7dc86dfdSMatthias Ringwald **********************************************************************
94*7dc86dfdSMatthias Ringwald */
95*7dc86dfdSMatthias Ringwald 
96*7dc86dfdSMatthias Ringwald /*********************************************************************
97*7dc86dfdSMatthias Ringwald *
98*7dc86dfdSMatthias Ringwald *       _write()
99*7dc86dfdSMatthias Ringwald *
100*7dc86dfdSMatthias Ringwald * Function description
101*7dc86dfdSMatthias Ringwald *   Low-level write function.
102*7dc86dfdSMatthias Ringwald *   libc subroutines will use this system routine for output to all files,
103*7dc86dfdSMatthias Ringwald *   including stdout.
104*7dc86dfdSMatthias Ringwald *   Write data via RTT.
105*7dc86dfdSMatthias Ringwald */
106*7dc86dfdSMatthias Ringwald int _write(int file, char *ptr, int len) {
107*7dc86dfdSMatthias Ringwald   (void) file;  /* Not used, avoid warning */
108*7dc86dfdSMatthias Ringwald   SEGGER_RTT_Write(0, ptr, len);
109*7dc86dfdSMatthias Ringwald   return len;
110*7dc86dfdSMatthias Ringwald }
111*7dc86dfdSMatthias Ringwald 
112*7dc86dfdSMatthias Ringwald /*********************************************************************
113*7dc86dfdSMatthias Ringwald *
114*7dc86dfdSMatthias Ringwald *       _write_r()
115*7dc86dfdSMatthias Ringwald *
116*7dc86dfdSMatthias Ringwald * Function description
117*7dc86dfdSMatthias Ringwald *   Low-level reentrant write function.
118*7dc86dfdSMatthias Ringwald *   libc subroutines will use this system routine for output to all files,
119*7dc86dfdSMatthias Ringwald *   including stdout.
120*7dc86dfdSMatthias Ringwald *   Write data via RTT.
121*7dc86dfdSMatthias Ringwald */
122*7dc86dfdSMatthias Ringwald int _write_r(struct _reent *r, int file, const void *ptr, int len) {
123*7dc86dfdSMatthias Ringwald   (void) file;  /* Not used, avoid warning */
124*7dc86dfdSMatthias Ringwald   (void) r;     /* Not used, avoid warning */
125*7dc86dfdSMatthias Ringwald   SEGGER_RTT_Write(0, ptr, len);
126*7dc86dfdSMatthias Ringwald   return len;
127*7dc86dfdSMatthias Ringwald }
128*7dc86dfdSMatthias Ringwald 
129*7dc86dfdSMatthias Ringwald #endif
130*7dc86dfdSMatthias Ringwald /****** End Of File *************************************************/
131