60 #if (defined (CONFIG_RTT) || (dg_configSYSTEMVIEW == 1))
62 #include "SEGGER_RTT_Conf.h"
71 #if (defined __SES_ARM) // SEGGER Embedded Studio
72 #define _CC_HAS_RTT_ASM_SUPPORT 1
73 #elif (defined __CROSSWORKS_ARM) // Rowley Crossworks
74 #define _CC_HAS_RTT_ASM_SUPPORT 1
75 #elif (defined __ARMCC_VERSION) // ARM compiler
76 #if (__ARMCC_VERSION >= 6000000) // ARM compiler V6.0 and later is clang based
77 #define _CC_HAS_RTT_ASM_SUPPORT 1
79 #define _CC_HAS_RTT_ASM_SUPPORT 0
81 #elif (defined __GNUC__) // GCC
82 #define _CC_HAS_RTT_ASM_SUPPORT 1
83 #elif (defined __clang__) // Clang compiler
84 #define _CC_HAS_RTT_ASM_SUPPORT 1
85 #elif ((defined __IASMARM__) || (defined __ICCARM__)) // IAR assembler/compiler
86 #define _CC_HAS_RTT_ASM_SUPPORT 1
88 #define _CC_HAS_RTT_ASM_SUPPORT 0
90 #if ((defined __IASMARM__) || (defined __ICCARM__)) // IAR assembler/compiler
94 #if (__VER__ < 6300000)
97 #define VOLATILE volatile
99 #if (defined __ARM7M__) // Needed for old versions that do not know the define yet
100 #if (__CORE__ == __ARM7M__) // Cortex-M3
101 #define _CORE_HAS_RTT_ASM_SUPPORT 1
104 #if (defined __ARM7EM__) // Needed for old versions that do not know the define yet
105 #if (__CORE__ == __ARM7EM__) // Cortex-M4/M7
106 #define _CORE_HAS_RTT_ASM_SUPPORT 1
107 #define _CORE_NEEDS_DMB 1
108 #define RTT__DMB() asm VOLATILE ("DMB");
111 #if (defined __ARM8M_BASELINE__) // Needed for old versions that do not know the define yet
112 #if (__CORE__ == __ARM8M_BASELINE__) // Cortex-M23
113 #define _CORE_HAS_RTT_ASM_SUPPORT 0
114 #define _CORE_NEEDS_DMB 1
115 #define RTT__DMB() asm VOLATILE ("DMB");
118 #if (defined __ARM8M_MAINLINE__) // Needed for old versions that do not know the define yet
119 #if (__CORE__ == __ARM8M_MAINLINE__) // Cortex-M33
120 #define _CORE_HAS_RTT_ASM_SUPPORT 1
121 #define _CORE_NEEDS_DMB 1
122 #define RTT__DMB() asm VOLATILE ("DMB");
129 #if (defined __ARM_ARCH_7M__) // Cortex-M3
130 #define _CORE_HAS_RTT_ASM_SUPPORT 1
131 #elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7
132 #define _CORE_HAS_RTT_ASM_SUPPORT 1
133 #define _CORE_NEEDS_DMB 1
134 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
135 #elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23
136 #define _CORE_HAS_RTT_ASM_SUPPORT 0
137 #define _CORE_NEEDS_DMB 1
138 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
139 #elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33
140 #define _CORE_HAS_RTT_ASM_SUPPORT 1
141 #define _CORE_NEEDS_DMB 1
142 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
144 #define _CORE_HAS_RTT_ASM_SUPPORT 0
150 #ifndef _CORE_HAS_RTT_ASM_SUPPORT
151 #define _CORE_HAS_RTT_ASM_SUPPORT 0 // Default for unknown cores
153 #if (_CC_HAS_RTT_ASM_SUPPORT && _CORE_HAS_RTT_ASM_SUPPORT)
154 #define RTT_USE_ASM (1)
156 #define RTT_USE_ASM (0)
165 #ifndef _CORE_NEEDS_DMB
166 #define _CORE_NEEDS_DMB 0
171 #error "Don't know how to place inline assembly for DMB"
177 #ifndef SEGGER_RTT_CPU_CACHE_LINE_SIZE
178 #define SEGGER_RTT_CPU_CACHE_LINE_SIZE (0) // On most target systems where RTT is used, we do not have a CPU cache, therefore 0 is a good default here
181 #ifndef SEGGER_RTT_UNCACHED_OFF
182 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
183 #error "SEGGER_RTT_UNCACHED_OFF must be defined when setting SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
185 #define SEGGER_RTT_UNCACHED_OFF (0)
189 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
190 #error "RTT_USE_ASM is not available if SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
194 #ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file
212 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE // Avoid division by zero in case we do not have any cache
213 #define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (((NumBytes + SEGGER_RTT_CPU_CACHE_LINE_SIZE - 1) / SEGGER_RTT_CPU_CACHE_LINE_SIZE) * SEGGER_RTT_CPU_CACHE_LINE_SIZE)
215 #define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (NumBytes)
217 #define SEGGER_RTT__CB_SIZE (16 + 4 + 4 + (SEGGER_RTT_MAX_NUM_UP_BUFFERS * 24) + (SEGGER_RTT_MAX_NUM_DOWN_BUFFERS * 24))
218 #define SEGGER_RTT__CB_PADDING (SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(SEGGER_RTT__CB_SIZE) - SEGGER_RTT__CB_SIZE)
234 unsigned SizeOfBuffer;
236 volatile unsigned RdOff;
238 } SEGGER_RTT_BUFFER_UP;
247 unsigned SizeOfBuffer;
248 volatile unsigned WrOff;
251 } SEGGER_RTT_BUFFER_DOWN;
261 int MaxNumDownBuffers;
262 SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS];
263 SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS];
264 #if SEGGER_RTT__CB_PADDING
265 unsigned char aDummy[SEGGER_RTT__CB_PADDING];
275 extern SEGGER_RTT_CB _SEGGER_RTT;
286 int SEGGER_RTT_AllocDownBuffer (
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
287 int SEGGER_RTT_AllocUpBuffer (
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
288 int SEGGER_RTT_ConfigUpBuffer (
unsigned BufferIndex,
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
289 int SEGGER_RTT_ConfigDownBuffer (
unsigned BufferIndex,
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
290 int SEGGER_RTT_GetKey (
void);
291 unsigned SEGGER_RTT_HasData (
unsigned BufferIndex);
292 int SEGGER_RTT_HasKey (
void);
293 unsigned SEGGER_RTT_HasDataUp (
unsigned BufferIndex);
294 void SEGGER_RTT_Init (
void);
295 unsigned SEGGER_RTT_Read (
unsigned BufferIndex,
void* pBuffer,
unsigned BufferSize);
296 unsigned SEGGER_RTT_ReadNoLock (
unsigned BufferIndex,
void* pData,
unsigned BufferSize);
297 int SEGGER_RTT_SetNameDownBuffer (
unsigned BufferIndex,
const char* sName);
298 int SEGGER_RTT_SetNameUpBuffer (
unsigned BufferIndex,
const char* sName);
299 int SEGGER_RTT_SetFlagsDownBuffer (
unsigned BufferIndex,
unsigned Flags);
300 int SEGGER_RTT_SetFlagsUpBuffer (
unsigned BufferIndex,
unsigned Flags);
301 int SEGGER_RTT_WaitKey (
void);
302 unsigned SEGGER_RTT_Write (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
303 unsigned SEGGER_RTT_WriteNoLock (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
304 unsigned SEGGER_RTT_WriteSkipNoLock (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
305 unsigned SEGGER_RTT_ASM_WriteSkipNoLock (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
306 unsigned SEGGER_RTT_WriteString (
unsigned BufferIndex,
const char* s);
307 void SEGGER_RTT_WriteWithOverwriteNoLock(
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
308 unsigned SEGGER_RTT_PutChar (
unsigned BufferIndex,
char c);
309 unsigned SEGGER_RTT_PutCharSkip (
unsigned BufferIndex,
char c);
310 unsigned SEGGER_RTT_PutCharSkipNoLock (
unsigned BufferIndex,
char c);
311 unsigned SEGGER_RTT_GetAvailWriteSpace (
unsigned BufferIndex);
312 unsigned SEGGER_RTT_GetBytesInBuffer (
unsigned BufferIndex);
316 #define SEGGER_RTT_HASDATA(n) (((SEGGER_RTT_BUFFER_DOWN*)((char*)&_SEGGER_RTT.aDown[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_DOWN*)((char*)&_SEGGER_RTT.aDown[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff)
319 #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock
328 unsigned SEGGER_RTT_ReadUpBuffer (
unsigned BufferIndex,
void* pBuffer,
unsigned BufferSize);
329 unsigned SEGGER_RTT_ReadUpBufferNoLock (
unsigned BufferIndex,
void* pData,
unsigned BufferSize);
330 unsigned SEGGER_RTT_WriteDownBuffer (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
331 unsigned SEGGER_RTT_WriteDownBufferNoLock (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
333 #define SEGGER_RTT_HASDATA_UP(n) (((SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff) // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
341 int SEGGER_RTT_SetTerminal (
unsigned char TerminalId);
342 int SEGGER_RTT_TerminalOut (
unsigned char TerminalId,
const char* s);
350 int SEGGER_RTT_printf(
unsigned BufferIndex,
const char * sFormat, ...);
351 int SEGGER_RTT_vprintf(
unsigned BufferIndex,
const char * sFormat, va_list * pParamList);
357 #endif // ifndef(SEGGER_RTT_ASM)
369 #define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0) // Skip. Do not block, output nothing. (Default)
370 #define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1) // Trim: Do not block, output as much as fits.
371 #define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2) // Block: Wait until there is space in the buffer.
372 #define SEGGER_RTT_MODE_MASK (3)
378 #define RTT_CTRL_RESET "\x1B[0m" // Reset to default colors
379 #define RTT_CTRL_CLEAR "\x1B[2J" // Clear screen, reposition cursor to top left
381 #define RTT_CTRL_TEXT_BLACK "\x1B[2;30m"
382 #define RTT_CTRL_TEXT_RED "\x1B[2;31m"
383 #define RTT_CTRL_TEXT_GREEN "\x1B[2;32m"
384 #define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m"
385 #define RTT_CTRL_TEXT_BLUE "\x1B[2;34m"
386 #define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m"
387 #define RTT_CTRL_TEXT_CYAN "\x1B[2;36m"
388 #define RTT_CTRL_TEXT_WHITE "\x1B[2;37m"
390 #define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m"
391 #define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m"
392 #define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m"
393 #define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m"
394 #define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m"
395 #define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m"
396 #define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m"
397 #define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m"
399 #define RTT_CTRL_BG_BLACK "\x1B[24;40m"
400 #define RTT_CTRL_BG_RED "\x1B[24;41m"
401 #define RTT_CTRL_BG_GREEN "\x1B[24;42m"
402 #define RTT_CTRL_BG_YELLOW "\x1B[24;43m"
403 #define RTT_CTRL_BG_BLUE "\x1B[24;44m"
404 #define RTT_CTRL_BG_MAGENTA "\x1B[24;45m"
405 #define RTT_CTRL_BG_CYAN "\x1B[24;46m"
406 #define RTT_CTRL_BG_WHITE "\x1B[24;47m"
408 #define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m"
409 #define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m"
410 #define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m"
411 #define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m"
412 #define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m"
413 #define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m"
414 #define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m"
415 #define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m"