DIY Logging Volt/Ampmeter
|
Go to the documentation of this file.
65 #if (defined __SES_ARM) // SEGGER Embedded Studio
66 #define _CC_HAS_RTT_ASM_SUPPORT 1
67 #elif (defined __CROSSWORKS_ARM) // Rowley Crossworks
68 #define _CC_HAS_RTT_ASM_SUPPORT 1
69 #elif (defined __ARMCC_VERSION) // ARM compiler
70 #if (__ARMCC_VERSION >= 6000000) // ARM compiler V6.0 and later is clang based
71 #define _CC_HAS_RTT_ASM_SUPPORT 1
73 #define _CC_HAS_RTT_ASM_SUPPORT 0
75 #elif (defined __GNUC__) // GCC
76 #define _CC_HAS_RTT_ASM_SUPPORT 1
77 #elif (defined __clang__) // Clang compiler
78 #define _CC_HAS_RTT_ASM_SUPPORT 1
79 #elif ((defined __IASMARM__) || (defined __ICCARM__)) // IAR assembler/compiler
80 #define _CC_HAS_RTT_ASM_SUPPORT 1
82 #define _CC_HAS_RTT_ASM_SUPPORT 0
84 #if ((defined __IASMARM__) || (defined __ICCARM__)) // IAR assembler/compiler
88 #if (__VER__ < 6300000)
91 #define VOLATILE volatile
93 #if (defined __ARM7M__) // Needed for old versions that do not know the define yet
94 #if (__CORE__ == __ARM7M__) // Cortex-M3
95 #define _CORE_HAS_RTT_ASM_SUPPORT 1
98 #if (defined __ARM7EM__) // Needed for old versions that do not know the define yet
99 #if (__CORE__ == __ARM7EM__) // Cortex-M4/M7
100 #define _CORE_HAS_RTT_ASM_SUPPORT 1
101 #define _CORE_NEEDS_DMB 1
102 #define RTT__DMB() asm VOLATILE ("DMB");
105 #if (defined __ARM8M_BASELINE__) // Needed for old versions that do not know the define yet
106 #if (__CORE__ == __ARM8M_BASELINE__) // Cortex-M23
107 #define _CORE_HAS_RTT_ASM_SUPPORT 0
108 #define _CORE_NEEDS_DMB 1
109 #define RTT__DMB() asm VOLATILE ("DMB");
112 #if (defined __ARM8M_MAINLINE__) // Needed for old versions that do not know the define yet
113 #if (__CORE__ == __ARM8M_MAINLINE__) // Cortex-M33
114 #define _CORE_HAS_RTT_ASM_SUPPORT 1
115 #define _CORE_NEEDS_DMB 1
116 #define RTT__DMB() asm VOLATILE ("DMB");
123 #if (defined __ARM_ARCH_7M__) // Cortex-M3
124 #define _CORE_HAS_RTT_ASM_SUPPORT 1
125 #elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7
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_8M_BASE__) // Cortex-M23
130 #define _CORE_HAS_RTT_ASM_SUPPORT 0
131 #define _CORE_NEEDS_DMB 1
132 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
133 #elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33
134 #define _CORE_HAS_RTT_ASM_SUPPORT 1
135 #define _CORE_NEEDS_DMB 1
136 #define RTT__DMB() __asm volatile ("dmb\n" : : :);
138 #define _CORE_HAS_RTT_ASM_SUPPORT 0
144 #ifndef _CORE_HAS_RTT_ASM_SUPPORT
145 #define _CORE_HAS_RTT_ASM_SUPPORT 0 // Default for unknown cores
147 #if (_CC_HAS_RTT_ASM_SUPPORT && _CORE_HAS_RTT_ASM_SUPPORT)
148 #define RTT_USE_ASM (1)
150 #define RTT_USE_ASM (0)
159 #ifndef _CORE_NEEDS_DMB
160 #define _CORE_NEEDS_DMB 0
165 #error "Don't know how to place inline assembly for DMB"
171 #ifndef SEGGER_RTT_CPU_CACHE_LINE_SIZE
172 #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
175 #ifndef SEGGER_RTT_UNCACHED_OFF
176 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
177 #error "SEGGER_RTT_UNCACHED_OFF must be defined when setting SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
179 #define SEGGER_RTT_UNCACHED_OFF (0)
183 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
184 #error "RTT_USE_ASM is not available if SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
188 #ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file
206 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE // Avoid division by zero in case we do not have any cache
207 #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)
209 #define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (NumBytes)
211 #define SEGGER_RTT__CB_SIZE (16 + 4 + 4 + (SEGGER_RTT_MAX_NUM_UP_BUFFERS * 24) + (SEGGER_RTT_MAX_NUM_DOWN_BUFFERS * 24))
212 #define SEGGER_RTT__CB_PADDING (SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(SEGGER_RTT__CB_SIZE) - SEGGER_RTT__CB_SIZE)
228 unsigned SizeOfBuffer;
230 volatile unsigned RdOff;
258 #if SEGGER_RTT__CB_PADDING
282 int SEGGER_RTT_ConfigUpBuffer (
unsigned BufferIndex,
const char* sName,
void* pBuffer,
unsigned BufferSize,
unsigned Flags);
289 unsigned SEGGER_RTT_Read (
unsigned BufferIndex,
void* pBuffer,
unsigned BufferSize);
296 unsigned SEGGER_RTT_Write (
unsigned BufferIndex,
const void* pBuffer,
unsigned NumBytes);
310 #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)
313 #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock
327 #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
345 int SEGGER_RTT_vprintf(
unsigned BufferIndex,
const char * sFormat, va_list * pParamList);
351 #endif // ifndef(SEGGER_RTT_ASM)
363 #define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0) // Skip. Do not block, output nothing. (Default)
364 #define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1) // Trim: Do not block, output as much as fits.
365 #define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2) // Block: Wait until there is space in the buffer.
366 #define SEGGER_RTT_MODE_MASK (3)
372 #define RTT_CTRL_RESET "\x1B[0m" // Reset to default colors
373 #define RTT_CTRL_CLEAR "\x1B[2J" // Clear screen, reposition cursor to top left
375 #define RTT_CTRL_TEXT_BLACK "\x1B[2;30m"
376 #define RTT_CTRL_TEXT_RED "\x1B[2;31m"
377 #define RTT_CTRL_TEXT_GREEN "\x1B[2;32m"
378 #define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m"
379 #define RTT_CTRL_TEXT_BLUE "\x1B[2;34m"
380 #define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m"
381 #define RTT_CTRL_TEXT_CYAN "\x1B[2;36m"
382 #define RTT_CTRL_TEXT_WHITE "\x1B[2;37m"
384 #define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m"
385 #define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m"
386 #define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m"
387 #define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m"
388 #define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m"
389 #define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m"
390 #define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m"
391 #define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m"
393 #define RTT_CTRL_BG_BLACK "\x1B[24;40m"
394 #define RTT_CTRL_BG_RED "\x1B[24;41m"
395 #define RTT_CTRL_BG_GREEN "\x1B[24;42m"
396 #define RTT_CTRL_BG_YELLOW "\x1B[24;43m"
397 #define RTT_CTRL_BG_BLUE "\x1B[24;44m"
398 #define RTT_CTRL_BG_MAGENTA "\x1B[24;45m"
399 #define RTT_CTRL_BG_CYAN "\x1B[24;46m"
400 #define RTT_CTRL_BG_WHITE "\x1B[24;47m"
402 #define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m"
403 #define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m"
404 #define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m"
405 #define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m"
406 #define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m"
407 #define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m"
408 #define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m"
409 #define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m"
unsigned SEGGER_RTT_ReadUpBufferNoLock(unsigned BufferIndex, void *pData, unsigned BufferSize)
unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void *pData, unsigned BufferSize)
unsigned SEGGER_RTT_WriteSkipNoLock(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
unsigned SEGGER_RTT_GetAvailWriteSpace(unsigned BufferIndex)
void SEGGER_RTT_Init(void)
int SEGGER_RTT_TerminalOut(unsigned char TerminalId, const char *s)
SEGGER_RTT_CB _SEGGER_RTT
#define SEGGER_RTT__CB_PADDING
unsigned SEGGER_RTT_WriteDownBufferNoLock(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
unsigned SEGGER_RTT_ASM_WriteSkipNoLock(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
unsigned SEGGER_RTT_PutChar(unsigned BufferIndex, char c)
int SEGGER_RTT_GetKey(void)
unsigned SEGGER_RTT_PutCharSkipNoLock(unsigned BufferIndex, char c)
unsigned SEGGER_RTT_WriteNoLock(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
int SEGGER_RTT_WaitKey(void)
unsigned SEGGER_RTT_HasDataUp(unsigned BufferIndex)
int SEGGER_RTT_vprintf(unsigned BufferIndex, const char *sFormat, va_list *pParamList)
unsigned SEGGER_RTT_GetBytesInBuffer(unsigned BufferIndex)
int SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char *sName, void *pBuffer, unsigned BufferSize, unsigned Flags)
int SEGGER_RTT_HasKey(void)
unsigned SEGGER_RTT_ReadUpBuffer(unsigned BufferIndex, void *pBuffer, unsigned BufferSize)
int SEGGER_RTT_AllocUpBuffer(const char *sName, void *pBuffer, unsigned BufferSize, unsigned Flags)
int SEGGER_RTT_SetTerminal(unsigned char TerminalId)
int SEGGER_RTT_SetNameDownBuffer(unsigned BufferIndex, const char *sName)
void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
int SEGGER_RTT_AllocDownBuffer(const char *sName, void *pBuffer, unsigned BufferSize, unsigned Flags)
int SEGGER_RTT_SetFlagsDownBuffer(unsigned BufferIndex, unsigned Flags)
#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS
unsigned SEGGER_RTT_HasData(unsigned BufferIndex)
#define SEGGER_RTT_MAX_NUM_UP_BUFFERS
int SEGGER_RTT_printf(unsigned BufferIndex, const char *sFormat,...)
int SEGGER_RTT_SetNameUpBuffer(unsigned BufferIndex, const char *sName)
unsigned SEGGER_RTT_WriteDownBuffer(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
int SEGGER_RTT_SetFlagsUpBuffer(unsigned BufferIndex, unsigned Flags)
int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char *sName, void *pBuffer, unsigned BufferSize, unsigned Flags)
unsigned SEGGER_RTT_Read(unsigned BufferIndex, void *pBuffer, unsigned BufferSize)
unsigned SEGGER_RTT_PutCharSkip(unsigned BufferIndex, char c)
unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
unsigned SEGGER_RTT_WriteString(unsigned BufferIndex, const char *s)