61#include "../Config/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" : : :);
100 #define _CORE_HAS_RTT_ASM_SUPPORT 0
102 #elif (defined __ARMCC_VERSION)
108 #if (__ARMCC_VERSION >= 6000000)
109 #define _CC_HAS_RTT_ASM_SUPPORT 1
111 #define _CC_HAS_RTT_ASM_SUPPORT 0
113 #if (defined __ARM_ARCH_6M__)
114 #define _CORE_HAS_RTT_ASM_SUPPORT 0
115 #elif (defined __ARM_ARCH_7M__)
116 #define _CORE_HAS_RTT_ASM_SUPPORT 1
117 #elif (defined __ARM_ARCH_7EM__)
118 #define _CORE_HAS_RTT_ASM_SUPPORT 1
119 #define _CORE_NEEDS_DMB 1
120 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
121 #elif (defined __ARM_ARCH_8M_BASE__)
122 #define _CORE_HAS_RTT_ASM_SUPPORT 0
123 #define _CORE_NEEDS_DMB 1
124 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
125 #elif (defined __ARM_ARCH_8M_MAIN__)
126 #define _CORE_HAS_RTT_ASM_SUPPORT 1
127 #define _CORE_NEEDS_DMB 1
128 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
129 #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__))
130 #define _CORE_NEEDS_DMB 1
131 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
133 #define _CORE_HAS_RTT_ASM_SUPPORT 0
135 #elif ((defined __GNUC__) || (defined __clang__))
139 #define _CC_HAS_RTT_ASM_SUPPORT 1
141 #if (defined __ARM_ARCH_7M__)
142 #define _CORE_HAS_RTT_ASM_SUPPORT 1
143 #elif (defined __ARM_ARCH_7EM__)
144 #define _CORE_HAS_RTT_ASM_SUPPORT 1
145 #define _CORE_NEEDS_DMB 1
146 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
147 #elif (defined __ARM_ARCH_8M_BASE__)
148 #define _CORE_HAS_RTT_ASM_SUPPORT 0
149 #define _CORE_NEEDS_DMB 1
150 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
151 #elif (defined __ARM_ARCH_8M_MAIN__)
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_7A__) || (defined __ARM_ARCH_7R__))
156 #define _CORE_NEEDS_DMB 1
157 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
159 #define _CORE_HAS_RTT_ASM_SUPPORT 0
161 #elif ((defined __IASMARM__) || (defined __ICCARM__))
165 #define _CC_HAS_RTT_ASM_SUPPORT 1
166 #if (__VER__ < 6300000)
169 #define VOLATILE volatile
171 #if (defined __ARM7M__)
172 #if (__CORE__ == __ARM7M__)
173 #define _CORE_HAS_RTT_ASM_SUPPORT 1
176 #if (defined __ARM7EM__)
177 #if (__CORE__ == __ARM7EM__)
178 #define _CORE_HAS_RTT_ASM_SUPPORT 1
179 #define _CORE_NEEDS_DMB 1
180 #define RTT__DMB() asm VOLATILE ("DMB");
183 #if (defined __ARM8M_BASELINE__)
184 #if (__CORE__ == __ARM8M_BASELINE__)
185 #define _CORE_HAS_RTT_ASM_SUPPORT 0
186 #define _CORE_NEEDS_DMB 1
187 #define RTT__DMB() asm VOLATILE ("DMB");
190 #if (defined __ARM8M_MAINLINE__)
191 #if (__CORE__ == __ARM8M_MAINLINE__)
192 #define _CORE_HAS_RTT_ASM_SUPPORT 1
193 #define _CORE_NEEDS_DMB 1
194 #define RTT__DMB() asm VOLATILE ("DMB");
197 #if (defined __ARM8EM_MAINLINE__)
198 #if (__CORE__ == __ARM8EM_MAINLINE__)
199 #define _CORE_HAS_RTT_ASM_SUPPORT 1
200 #define _CORE_NEEDS_DMB 1
201 #define RTT__DMB() asm VOLATILE ("DMB");
204 #if (defined __ARM7A__)
205 #if (__CORE__ == __ARM7A__)
206 #define _CORE_NEEDS_DMB 1
207 #define RTT__DMB() asm VOLATILE ("DMB");
210 #if (defined __ARM7R__)
211 #if (__CORE__ == __ARM7R__)
212 #define _CORE_NEEDS_DMB 1
213 #define RTT__DMB() asm VOLATILE ("DMB");
222 #define _CC_HAS_RTT_ASM_SUPPORT 0
223 #define _CORE_HAS_RTT_ASM_SUPPORT 0
228 #ifndef _CORE_HAS_RTT_ASM_SUPPORT
229 #define _CORE_HAS_RTT_ASM_SUPPORT 0
231 #if (_CC_HAS_RTT_ASM_SUPPORT && _CORE_HAS_RTT_ASM_SUPPORT)
232 #define RTT_USE_ASM (1)
234 #define RTT_USE_ASM (0)
238#ifndef _CORE_NEEDS_DMB
239 #define _CORE_NEEDS_DMB 0
244 #error "Don't know how to place inline assembly for DMB"
250#ifndef SEGGER_RTT_CPU_CACHE_LINE_SIZE
251 #define SEGGER_RTT_CPU_CACHE_LINE_SIZE (0)
254#ifndef SEGGER_RTT_UNCACHED_OFF
255 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
256 #error "SEGGER_RTT_UNCACHED_OFF must be defined when setting SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
258 #define SEGGER_RTT_UNCACHED_OFF (0)
262 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
263 #error "RTT_USE_ASM is not available if SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
267#ifndef SEGGER_RTT_ASM
285#if SEGGER_RTT_CPU_CACHE_LINE_SIZE
286 #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)
288 #define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (NumBytes)
290#define SEGGER_RTT__CB_SIZE (16 + 4 + 4 + (SEGGER_RTT_MAX_NUM_UP_BUFFERS * 24) + (SEGGER_RTT_MAX_NUM_DOWN_BUFFERS * 24))
291#define SEGGER_RTT__CB_PADDING (SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(SEGGER_RTT__CB_SIZE) - SEGGER_RTT__CB_SIZE)
307 unsigned SizeOfBuffer;
309 volatile unsigned RdOff;
320 unsigned SizeOfBuffer;
321 volatile unsigned WrOff;
334 int MaxNumDownBuffers;
337#if SEGGER_RTT__CB_PADDING
338 unsigned char aDummy[SEGGER_RTT__CB_PADDING];
359int SEGGER_RTT_AllocDownBuffer (
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
360int SEGGER_RTT_AllocUpBuffer (
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
361int SEGGER_RTT_ConfigUpBuffer (
unsigned BufferIndex,
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
362int SEGGER_RTT_ConfigDownBuffer (
unsigned BufferIndex,
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
363int SEGGER_RTT_GetKey (
void);
364unsigned SEGGER_RTT_HasData (
unsigned BufferIndex);
365int SEGGER_RTT_HasKey (
void);
366unsigned SEGGER_RTT_HasDataUp (
unsigned BufferIndex);
367void SEGGER_RTT_Init (
void);
368unsigned SEGGER_RTT_Read (
unsigned BufferIndex,
void* pBuffer,
unsigned BufferSize);
369unsigned SEGGER_RTT_ReadNoLock (
unsigned BufferIndex,
void* pData,
unsigned BufferSize);
370int SEGGER_RTT_SetNameDownBuffer (
unsigned BufferIndex,
const char* sName);
371int SEGGER_RTT_SetNameUpBuffer (
unsigned BufferIndex,
const char* sName);
372int SEGGER_RTT_SetFlagsDownBuffer (
unsigned BufferIndex,
unsigned Flags);
373int SEGGER_RTT_SetFlagsUpBuffer (
unsigned BufferIndex,
unsigned Flags);
374int SEGGER_RTT_WaitKey (
void);
375unsigned SEGGER_RTT_Write (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
376unsigned SEGGER_RTT_WriteNoLock (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
377unsigned SEGGER_RTT_WriteSkipNoLock (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
378unsigned SEGGER_RTT_ASM_WriteSkipNoLock (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
379unsigned SEGGER_RTT_WriteString (
unsigned BufferIndex,
const char* s);
380void SEGGER_RTT_WriteWithOverwriteNoLock(
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
381unsigned SEGGER_RTT_PutChar (
unsigned BufferIndex,
char c);
382unsigned SEGGER_RTT_PutCharSkip (
unsigned BufferIndex,
char c);
383unsigned SEGGER_RTT_PutCharSkipNoLock (
unsigned BufferIndex,
char c);
384unsigned SEGGER_RTT_GetAvailWriteSpace (
unsigned BufferIndex);
385unsigned SEGGER_RTT_GetBytesInBuffer (
unsigned BufferIndex);
389#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)
392 #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock
401unsigned SEGGER_RTT_ReadUpBuffer (
unsigned BufferIndex,
void* pBuffer,
unsigned BufferSize);
402unsigned SEGGER_RTT_ReadUpBufferNoLock (
unsigned BufferIndex,
void* pData,
unsigned BufferSize);
403unsigned SEGGER_RTT_WriteDownBuffer (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
404unsigned SEGGER_RTT_WriteDownBufferNoLock (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
406#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)
414int SEGGER_RTT_SetTerminal (
unsigned char TerminalId);
415int SEGGER_RTT_TerminalOut (
unsigned char TerminalId,
const char* s);
423int SEGGER_RTT_printf(
unsigned BufferIndex,
const char * sFormat, ...);
424int SEGGER_RTT_vprintf(
unsigned BufferIndex,
const char * sFormat, va_list * pParamList);
442#define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0)
443#define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1)
444#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2)
445#define SEGGER_RTT_MODE_MASK (3)
451#define RTT_CTRL_RESET "\x1B[0m"
452#define RTT_CTRL_CLEAR "\x1B[2J"
454#define RTT_CTRL_TEXT_BLACK "\x1B[2;30m"
455#define RTT_CTRL_TEXT_RED "\x1B[2;31m"
456#define RTT_CTRL_TEXT_GREEN "\x1B[2;32m"
457#define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m"
458#define RTT_CTRL_TEXT_BLUE "\x1B[2;34m"
459#define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m"
460#define RTT_CTRL_TEXT_CYAN "\x1B[2;36m"
461#define RTT_CTRL_TEXT_WHITE "\x1B[2;37m"
463#define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m"
464#define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m"
465#define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m"
466#define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m"
467#define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m"
468#define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m"
469#define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m"
470#define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m"
472#define RTT_CTRL_BG_BLACK "\x1B[24;40m"
473#define RTT_CTRL_BG_RED "\x1B[24;41m"
474#define RTT_CTRL_BG_GREEN "\x1B[24;42m"
475#define RTT_CTRL_BG_YELLOW "\x1B[24;43m"
476#define RTT_CTRL_BG_BLUE "\x1B[24;44m"
477#define RTT_CTRL_BG_MAGENTA "\x1B[24;45m"
478#define RTT_CTRL_BG_CYAN "\x1B[24;46m"
479#define RTT_CTRL_BG_WHITE "\x1B[24;47m"
481#define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m"
482#define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m"
483#define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m"
484#define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m"
485#define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m"
486#define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m"
487#define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m"
488#define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m"
Definition SEGGER_RTT.h:317
Definition SEGGER_RTT.h:304
Definition SEGGER_RTT.h:331