61#include "SEGGER_RTT_Conf.h"
83 #if (defined __CROSSWORKS_ARM)
84 #define _CC_HAS_RTT_ASM_SUPPORT 1
85 #if (defined __ARM_ARCH_7M__)
86 #define _CORE_HAS_RTT_ASM_SUPPORT 1
87 #elif (defined __ARM_ARCH_7EM__)
88 #define _CORE_HAS_RTT_ASM_SUPPORT 1
89 #define _CORE_NEEDS_DMB 1
90 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
91 #elif (defined __ARM_ARCH_8M_BASE__)
92 #define _CORE_HAS_RTT_ASM_SUPPORT 0
93 #define _CORE_NEEDS_DMB 1
94 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
95 #elif (defined __ARM_ARCH_8M_MAIN__)
96 #define _CORE_HAS_RTT_ASM_SUPPORT 1
97 #define _CORE_NEEDS_DMB 1
98 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
99 #elif (defined(__ARM_ARCH_8_1M_MAIN__))
100 #define _CORE_HAS_RTT_ASM_SUPPORT 1
101 #define _CORE_NEEDS_DMB 1
102 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
104 #define _CORE_HAS_RTT_ASM_SUPPORT 0
106 #elif (defined __ARMCC_VERSION)
112 #if (__ARMCC_VERSION >= 6000000)
113 #define _CC_HAS_RTT_ASM_SUPPORT 1
115 #define _CC_HAS_RTT_ASM_SUPPORT 0
117 #if (defined __ARM_ARCH_6M__)
118 #define _CORE_HAS_RTT_ASM_SUPPORT 0
119 #elif (defined __ARM_ARCH_7M__)
120 #define _CORE_HAS_RTT_ASM_SUPPORT 1
121 #elif (defined __ARM_ARCH_7EM__)
122 #define _CORE_HAS_RTT_ASM_SUPPORT 1
123 #define _CORE_NEEDS_DMB 1
124 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
125 #elif (defined __ARM_ARCH_8M_BASE__)
126 #define _CORE_HAS_RTT_ASM_SUPPORT 0
127 #define _CORE_NEEDS_DMB 1
128 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
129 #elif (defined __ARM_ARCH_8M_MAIN__)
130 #define _CORE_HAS_RTT_ASM_SUPPORT 1
131 #define _CORE_NEEDS_DMB 1
132 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
133 #elif (defined __ARM_ARCH_8_1M_MAIN__)
134 #define _CORE_HAS_RTT_ASM_SUPPORT 1
135 #define _CORE_NEEDS_DMB 1
136 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
137 #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__))
138 #define _CORE_NEEDS_DMB 1
139 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
141 #define _CORE_HAS_RTT_ASM_SUPPORT 0
143 #elif ((defined __GNUC__) || (defined __clang__))
147 #define _CC_HAS_RTT_ASM_SUPPORT 1
149 #if (defined __ARM_ARCH_7M__)
150 #define _CORE_HAS_RTT_ASM_SUPPORT 1
151 #elif (defined __ARM_ARCH_7EM__)
152 #define _CORE_HAS_RTT_ASM_SUPPORT 1
153 #define _CORE_NEEDS_DMB 1
154 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
155 #elif (defined __ARM_ARCH_8M_BASE__)
156 #define _CORE_HAS_RTT_ASM_SUPPORT 0
157 #define _CORE_NEEDS_DMB 1
158 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
159 #elif (defined __ARM_ARCH_8M_MAIN__)
160 #define _CORE_HAS_RTT_ASM_SUPPORT 1
161 #define _CORE_NEEDS_DMB 1
162 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
163 #elif (defined __ARM_ARCH_8_1M_MAIN__)
164 #define _CORE_HAS_RTT_ASM_SUPPORT 1
165 #define _CORE_NEEDS_DMB 1
166 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
167 #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__))
168 #define _CORE_NEEDS_DMB 1
169 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
171 #define _CORE_HAS_RTT_ASM_SUPPORT 0
173 #elif ((defined __IASMARM__) || (defined __ICCARM__))
177 #define _CC_HAS_RTT_ASM_SUPPORT 1
178 #if (__VER__ < 6300000)
181 #define VOLATILE volatile
183 #if (defined __ARM7M__)
184 #if (__CORE__ == __ARM7M__)
185 #define _CORE_HAS_RTT_ASM_SUPPORT 1
188 #if (defined __ARM7EM__)
189 #if (__CORE__ == __ARM7EM__)
190 #define _CORE_HAS_RTT_ASM_SUPPORT 1
191 #define _CORE_NEEDS_DMB 1
192 #define RTT__DMB() asm VOLATILE ("DMB");
195 #if (defined __ARM8M_BASELINE__)
196 #if (__CORE__ == __ARM8M_BASELINE__)
197 #define _CORE_HAS_RTT_ASM_SUPPORT 0
198 #define _CORE_NEEDS_DMB 1
199 #define RTT__DMB() asm VOLATILE ("DMB");
202 #if (defined __ARM8M_MAINLINE__)
203 #if (__CORE__ == __ARM8M_MAINLINE__)
204 #define _CORE_HAS_RTT_ASM_SUPPORT 1
205 #define _CORE_NEEDS_DMB 1
206 #define RTT__DMB() asm VOLATILE ("DMB");
209 #if (defined __ARM8EM_MAINLINE__)
210 #if (__CORE__ == __ARM8EM_MAINLINE__)
211 #define _CORE_HAS_RTT_ASM_SUPPORT 1
212 #define _CORE_NEEDS_DMB 1
213 #define RTT__DMB() asm VOLATILE ("DMB");
216 #if (defined __ARM7A__)
217 #if (__CORE__ == __ARM7A__)
218 #define _CORE_NEEDS_DMB 1
219 #define RTT__DMB() asm VOLATILE ("DMB");
222 #if (defined __ARM7R__)
223 #if (__CORE__ == __ARM7R__)
224 #define _CORE_NEEDS_DMB 1
225 #define RTT__DMB() asm VOLATILE ("DMB");
234 #define _CC_HAS_RTT_ASM_SUPPORT 0
235 #define _CORE_HAS_RTT_ASM_SUPPORT 0
240 #ifndef _CORE_HAS_RTT_ASM_SUPPORT
241 #define _CORE_HAS_RTT_ASM_SUPPORT 0
243 #if (_CC_HAS_RTT_ASM_SUPPORT && _CORE_HAS_RTT_ASM_SUPPORT)
244 #define RTT_USE_ASM (1)
246 #define RTT_USE_ASM (0)
250#ifndef _CORE_NEEDS_DMB
251 #define _CORE_NEEDS_DMB 0
256 #error "Don't know how to place inline assembly for DMB"
262#ifndef SEGGER_RTT_CPU_CACHE_LINE_SIZE
263 #define SEGGER_RTT_CPU_CACHE_LINE_SIZE (0)
266#ifndef SEGGER_RTT_UNCACHED_OFF
267 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
268 #error "SEGGER_RTT_UNCACHED_OFF must be defined when setting SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
270 #define SEGGER_RTT_UNCACHED_OFF (0)
274 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
275 #error "RTT_USE_ASM is not available if SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
279#ifndef SEGGER_RTT_ASM
298#if SEGGER_RTT_CPU_CACHE_LINE_SIZE
299 #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)
301 #define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (NumBytes)
303#define SEGGER_RTT__CB_SIZE (16 + 4 + 4 + (SEGGER_RTT_MAX_NUM_UP_BUFFERS * 24) + (SEGGER_RTT_MAX_NUM_DOWN_BUFFERS * 24))
304#define SEGGER_RTT__CB_PADDING (SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(SEGGER_RTT__CB_SIZE) - SEGGER_RTT__CB_SIZE)
320 unsigned SizeOfBuffer;
322 volatile unsigned RdOff;
324} SEGGER_RTT_BUFFER_UP;
333 unsigned SizeOfBuffer;
334 volatile unsigned WrOff;
337} SEGGER_RTT_BUFFER_DOWN;
347 int MaxNumDownBuffers;
348 SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS];
349 SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS];
350#if SEGGER_RTT__CB_PADDING
351 unsigned char aDummy[SEGGER_RTT__CB_PADDING];
361extern SEGGER_RTT_CB _SEGGER_RTT;
372int SEGGER_RTT_AllocDownBuffer (
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
373int SEGGER_RTT_AllocUpBuffer (
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
374int SEGGER_RTT_ConfigUpBuffer (
unsigned BufferIndex,
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
375int SEGGER_RTT_ConfigDownBuffer (
unsigned BufferIndex,
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
376int SEGGER_RTT_GetKey (
void);
377unsigned SEGGER_RTT_HasData (
unsigned BufferIndex);
378int SEGGER_RTT_HasKey (
void);
379unsigned SEGGER_RTT_HasDataUp (
unsigned BufferIndex);
380void SEGGER_RTT_Init (
void);
381unsigned SEGGER_RTT_Read (
unsigned BufferIndex,
void* pBuffer,
unsigned BufferSize);
382unsigned SEGGER_RTT_ReadNoLock (
unsigned BufferIndex,
void* pData,
unsigned BufferSize);
383int SEGGER_RTT_SetNameDownBuffer (
unsigned BufferIndex,
const char* sName);
384int SEGGER_RTT_SetNameUpBuffer (
unsigned BufferIndex,
const char* sName);
385int SEGGER_RTT_SetFlagsDownBuffer (
unsigned BufferIndex,
unsigned Flags);
386int SEGGER_RTT_SetFlagsUpBuffer (
unsigned BufferIndex,
unsigned Flags);
387int SEGGER_RTT_WaitKey (
void);
388unsigned SEGGER_RTT_Write (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
389unsigned SEGGER_RTT_WriteNoLock (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
390unsigned SEGGER_RTT_WriteSkipNoLock (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
391unsigned SEGGER_RTT_ASM_WriteSkipNoLock (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
392unsigned SEGGER_RTT_WriteString (
unsigned BufferIndex,
const char* s);
393void SEGGER_RTT_WriteWithOverwriteNoLock(
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
394unsigned SEGGER_RTT_PutChar (
unsigned BufferIndex,
char c);
395unsigned SEGGER_RTT_PutCharSkip (
unsigned BufferIndex,
char c);
396unsigned SEGGER_RTT_PutCharSkipNoLock (
unsigned BufferIndex,
char c);
397unsigned SEGGER_RTT_GetAvailWriteSpace (
unsigned BufferIndex);
398unsigned SEGGER_RTT_GetBytesInBuffer (
unsigned BufferIndex);
402#define SEGGER_RTT_HASDATA(n) (((SEGGER_RTT_BUFFER_DOWN*)((uintptr_t)&_SEGGER_RTT.aDown[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_DOWN*)((uintptr_t)&_SEGGER_RTT.aDown[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff)
405 #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock
414unsigned SEGGER_RTT_ReadUpBuffer (
unsigned BufferIndex,
void* pBuffer,
unsigned BufferSize);
415unsigned SEGGER_RTT_ReadUpBufferNoLock (
unsigned BufferIndex,
void* pData,
unsigned BufferSize);
416unsigned SEGGER_RTT_WriteDownBuffer (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
417unsigned SEGGER_RTT_WriteDownBufferNoLock (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
419#define SEGGER_RTT_HASDATA_UP(n) (((SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff)
427int SEGGER_RTT_SetTerminal (
unsigned char TerminalId);
428int SEGGER_RTT_TerminalOut (
unsigned char TerminalId,
const char* s);
436int SEGGER_RTT_printf(
unsigned BufferIndex,
const char * sFormat, ...);
437int SEGGER_RTT_vprintf(
unsigned BufferIndex,
const char * sFormat, va_list * pParamList);
449 #define NULL ((void*)0)
462#define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0)
463#define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1)
464#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2)
465#define SEGGER_RTT_MODE_MASK (3)
471#define RTT_CTRL_RESET "\x1B[0m"
472#define RTT_CTRL_CLEAR "\x1B[2J"
474#define RTT_CTRL_TEXT_BLACK "\x1B[2;30m"
475#define RTT_CTRL_TEXT_RED "\x1B[2;31m"
476#define RTT_CTRL_TEXT_GREEN "\x1B[2;32m"
477#define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m"
478#define RTT_CTRL_TEXT_BLUE "\x1B[2;34m"
479#define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m"
480#define RTT_CTRL_TEXT_CYAN "\x1B[2;36m"
481#define RTT_CTRL_TEXT_WHITE "\x1B[2;37m"
483#define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m"
484#define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m"
485#define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m"
486#define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m"
487#define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m"
488#define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m"
489#define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m"
490#define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m"
492#define RTT_CTRL_BG_BLACK "\x1B[24;40m"
493#define RTT_CTRL_BG_RED "\x1B[24;41m"
494#define RTT_CTRL_BG_GREEN "\x1B[24;42m"
495#define RTT_CTRL_BG_YELLOW "\x1B[24;43m"
496#define RTT_CTRL_BG_BLUE "\x1B[24;44m"
497#define RTT_CTRL_BG_MAGENTA "\x1B[24;45m"
498#define RTT_CTRL_BG_CYAN "\x1B[24;46m"
499#define RTT_CTRL_BG_WHITE "\x1B[24;47m"
501#define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m"
502#define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m"
503#define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m"
504#define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m"
505#define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m"
506#define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m"
507#define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m"
508#define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m"