systemview  1.3.1
systemview
SEGGER.h
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.52a *
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 <stdarg.h>
68 #include "Global.h" // Type definitions: U8, U16, U32, I8, I16, I32
69 
70 #if defined(__cplusplus)
71 extern "C" { /* Make sure we have C-declarations in C++ programs */
72 #endif
73 
74 /*********************************************************************
75 *
76 * Keywords/specifiers
77 *
78 **********************************************************************
79 */
80 
81 #ifndef INLINE
82  #ifdef _WIN32
83  //
84  // Microsoft VC6 and newer.
85  // Force inlining without cost checking.
86  //
87  #define INLINE __forceinline
88  #else
89  #if (defined(__GNUC__))
90  //
91  // Force inlining with GCC
92  //
93  #define INLINE inline __attribute__((always_inline))
94  #elif (defined(__CC_ARM))
95  //
96  // Force inlining with ARMCC (Keil)
97  //
98  #define INLINE __inline
99  #elif (defined(__ICCARM__) || defined(__RX) || defined(__ICCRX__))
100  //
101  // Other known compilers.
102  //
103  #define INLINE inline
104  #else
105  //
106  // Unknown compilers.
107  //
108  #define INLINE
109  #endif
110  #endif
111 #endif
112 
113 /*********************************************************************
114 *
115 * Function-like macros
116 *
117 **********************************************************************
118 */
119 
120 #define SEGGER_COUNTOF(a) (sizeof((a))/sizeof((a)[0]))
121 #define SEGGER_MIN(a,b) (((a) < (b)) ? (a) : (b))
122 #define SEGGER_MAX(a,b) (((a) > (b)) ? (a) : (b))
123 
124 #ifndef SEGGER_USE_PARA // Some compiler complain about unused parameters.
125  #define SEGGER_USE_PARA(Para) (void)Para // This works for most compilers.
126 #endif
127 
128 /*********************************************************************
129 *
130 * Defines
131 *
132 **********************************************************************
133 */
134 
135 #define SEGGER_PRINTF_FLAG_ADJLEFT (1 << 0)
136 #define SEGGER_PRINTF_FLAG_SIGNFORCE (1 << 1)
137 #define SEGGER_PRINTF_FLAG_SIGNSPACE (1 << 2)
138 #define SEGGER_PRINTF_FLAG_PRECEED (1 << 3)
139 #define SEGGER_PRINTF_FLAG_ZEROPAD (1 << 4)
140 #define SEGGER_PRINTF_FLAG_NEGATIVE (1 << 5)
141 
142 /*********************************************************************
143 *
144 * Types
145 *
146 **********************************************************************
147 */
148 
149 typedef struct {
150  char* pBuffer;
151  int BufferSize;
152  int Cnt;
154 
155 typedef struct {
156  int CacheLineSize; // 0: No Cache. Most Systems such as ARM9 use a 32 bytes cache line size.
157  void (*pfDMB) (void); // Optional DMB function for Data Memory Barrier to make sure all memory operations are completed.
158  void (*pfClean) (void *p, unsigned NumBytes); // Optional clean function for cached memory.
159  void (*pfInvalidate)(void *p, unsigned NumBytes); // Optional invalidate function for cached memory.
161 
162 typedef struct SEGGER_SNPRINTF_CONTEXT_struct SEGGER_SNPRINTF_CONTEXT;
163 
165  void* pContext; // Application specific context.
166  SEGGER_BUFFER_DESC* pBufferDesc; // Buffer descriptor to use for output.
167  void (*pfFlush)(SEGGER_SNPRINTF_CONTEXT* pContext); // Callback executed once the buffer is full. Callback decides if the buffer gets cleared to store more or not.
168 };
169 
170 typedef struct {
171  void (*pfStoreChar) (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, char c);
172  int (*pfPrintUnsigned) (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, U32 v, unsigned Base, char Flags, int Width, int Precision);
173  int (*pfPrintInt) (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, I32 v, unsigned Base, char Flags, int Width, int Precision);
175 
176 typedef void (*SEGGER_pFormatter)(SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, const SEGGER_PRINTF_API* pApi, va_list* pParamList, char Lead, int Width, int Precision);
177 
178 typedef struct SEGGER_PRINTF_FORMATTER {
179  struct SEGGER_PRINTF_FORMATTER* pNext; // Pointer to next formatter.
180  SEGGER_pFormatter pfFormatter; // Formatter function.
181  char Specifier; // Format specifier.
183 
184 /*********************************************************************
185 *
186 * Utility functions
187 *
188 **********************************************************************
189 */
190 
191 //
192 // Memory operations.
193 //
194 void SEGGER_ARM_memcpy(void* pDest, const void* pSrc, int NumBytes);
195 void SEGGER_memcpy (void* pDest, const void* pSrc, int NumBytes);
196 void SEGGER_memxor (void* pDest, const void* pSrc, unsigned NumBytes);
197 
198 //
199 // String functions.
200 //
201 int SEGGER_atoi (const char* s);
202 int SEGGER_isalnum (int c);
203 int SEGGER_isalpha (int c);
204 unsigned SEGGER_strlen (const char* s);
205 int SEGGER_tolower (int c);
206 int SEGGER_strcasecmp(const char* sText1, const char* sText2);
207 
208 //
209 // Buffer/printf related.
210 //
211 void SEGGER_StoreChar (SEGGER_BUFFER_DESC* pBufferDesc, char c);
212 void SEGGER_PrintUnsigned(SEGGER_BUFFER_DESC* pBufferDesc, U32 v, unsigned Base, int Precision);
213 void SEGGER_PrintInt (SEGGER_BUFFER_DESC* pBufferDesc, I32 v, unsigned Base, int Precision);
214 int SEGGER_snprintf (char* pBuffer, int BufferSize, const char* sFormat, ...);
215 int SEGGER_vsnprintf (char* pBuffer, int BufferSize, const char* sFormat, va_list ParamList);
216 int SEGGER_vsnprintfEx (SEGGER_SNPRINTF_CONTEXT* pContext, const char* sFormat, va_list ParamList);
217 
218 int SEGGER_PRINTF_AddFormatter (SEGGER_PRINTF_FORMATTER* pFormatter, SEGGER_pFormatter pfFormatter, char c);
219 void SEGGER_PRINTF_AddDoubleFormatter(void);
220 void SEGGER_PRINTF_AddIPFormatter (void);
221 void SEGGER_PRINTF_AddHTMLFormatter (void);
222 
223 #if defined(__cplusplus)
224 } /* Make sure we have C-declarations in C++ programs */
225 #endif
226 
227 #endif // Avoid multiple inclusion
228 
229 /*************************** End of file ****************************/