1 /*********************************************************************
2 *                SEGGER Microcontroller GmbH & Co. KG                *
3 *                        The Embedded Experts                        *
4 **********************************************************************
5 *                                                                    *
6 *       (c) 2015 - 2017  SEGGER Microcontroller GmbH & Co. KG        *
7 *                                                                    *
8 *       www.segger.com     Support: support@segger.com               *
9 *                                                                    *
10 **********************************************************************
11 *                                                                    *
12 *       SEGGER SystemView * Real-time application analysis           *
13 *                                                                    *
14 **********************************************************************
15 *                                                                    *
16 * All rights reserved.                                               *
17 *                                                                    *
18 * SEGGER strongly recommends to not make any changes                 *
19 * to or modify the source code of this software in order to stay     *
20 * compatible with the RTT protocol and J-Link.                       *
21 *                                                                    *
22 * Redistribution and use in source and binary forms, with or         *
23 * without modification, are permitted provided that the following    *
24 * conditions are met:                                                *
25 *                                                                    *
26 * o Redistributions of source code must retain the above copyright   *
27 *   notice, this list of conditions and the following disclaimer.    *
28 *                                                                    *
29 * o Redistributions in binary form must reproduce the above          *
30 *   copyright notice, this list of conditions and the following      *
31 *   disclaimer in the documentation and/or other materials provided  *
32 *   with the distribution.                                           *
33 *                                                                    *
34 * o Neither the name of SEGGER Microcontroller GmbH & Co. KG         *
35 *   nor the names of its contributors may be used to endorse or      *
36 *   promote products derived from this software without specific     *
37 *   prior written permission.                                        *
38 *                                                                    *
39 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND             *
40 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,        *
41 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF           *
42 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE           *
43 * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
44 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR           *
45 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  *
46 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;    *
47 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF      *
48 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT          *
49 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE  *
50 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH   *
51 * DAMAGE.                                                            *
52 *                                                                    *
53 **********************************************************************
54 *                                                                    *
55 *       SystemView version: V2.42                                    *
56 *                                                                    *
57 **********************************************************************
58 ----------------------------------------------------------------------
59 File    : SEGGER.h
60 Purpose : Global types etc & general purpose utility functions
61 ---------------------------END-OF-HEADER------------------------------
62 */
63 
64 #ifndef SEGGER_H            // Guard against multiple inclusion
65 #define SEGGER_H
66 
67 #include "Global.h"         // Type definitions: U8, U16, U32, I8, I16, I32
68 
69 #if defined(__cplusplus)
70 extern "C" {     /* Make sure we have C-declarations in C++ programs */
71 #endif
72 
73 /*********************************************************************
74 *
75 *       Keywords/specifiers
76 *
77 **********************************************************************
78 */
79 
80 #ifndef INLINE
81   #ifdef _WIN32
82     //
83     // Microsoft VC6 and newer.
84     // Force inlining without cost checking.
85     //
86     #define INLINE  __forceinline
87   #else
88     #if (defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__) || defined(__RX) || defined(__ICCRX__))
89       //
90       // Other known compilers.
91       //
92       #define INLINE  inline
93     #else
94       //
95       // Unknown compilers.
96       //
97       #define INLINE
98     #endif
99   #endif
100 #endif
101 
102 /*********************************************************************
103 *
104 *       Function-like macros
105 *
106 **********************************************************************
107 */
108 
109 #define SEGGER_COUNTOF(a)          (sizeof((a))/sizeof((a)[0]))
110 #define SEGGER_MIN(a,b)            (((a) < (b)) ? (a) : (b))
111 #define SEGGER_MAX(a,b)            (((a) > (b)) ? (a) : (b))
112 
113 /*********************************************************************
114 *
115 *       Types
116 *
117 **********************************************************************
118 */
119 
120 typedef struct {
121   char *pBuffer;
122   int   BufferSize;
123   int   Cnt;
124 } SEGGER_BUFFER_DESC;
125 
126 typedef struct {
127   int  CacheLineSize;                                // 0: No Cache. Most Systems such as ARM9 use a 32 bytes cache line size.
128   void (*pfDMB)       (void);                        // Optional DMB function for Data Memory Barrier to make sure all memory operations are completed.
129   void (*pfClean)     (void *p, unsigned NumBytes);  // Optional clean function for cached memory.
130   void (*pfInvalidate)(void *p, unsigned NumBytes);  // Optional invalidate function for cached memory.
131 } SEGGER_CACHE_CONFIG;
132 
133 /*********************************************************************
134 *
135 *       Utility functions
136 *
137 **********************************************************************
138 */
139 
140 void SEGGER_ARM_memcpy   (void *pDest, const void *pSrc, int NumBytes);
141 void SEGGER_memcpy       (void *pDest, const void *pSrc, int NumBytes);
142 void SEGGER_memxor       (void *pDest, const void *pSrc, unsigned NumBytes);
143 void SEGGER_StoreChar    (SEGGER_BUFFER_DESC *p, char c);
144 void SEGGER_PrintUnsigned(SEGGER_BUFFER_DESC *pBufferDesc, U32 v, unsigned Base, int NumDigits);
145 void SEGGER_PrintInt     (SEGGER_BUFFER_DESC *pBufferDesc, I32 v, unsigned Base, unsigned NumDigits);
146 int  SEGGER_snprintf     (char *pBuffer, int BufferSize, const char *sFormat, ...);
147 
148 
149 #if defined(__cplusplus)
150 }                /* Make sure we have C-declarations in C++ programs */
151 #endif
152 
153 #endif                      // Avoid multiple inclusion
154 
155 /*************************** End of file ****************************/
156