123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492 |
- #ifndef SEGGER_RTT_H
- #define SEGGER_RTT_H
- #include "SEGGER_RTT_Conf.h"
- #ifndef RTT_USE_ASM
-
-
-
-
-
-
-
-
-
-
-
-
- #if (defined __CROSSWORKS_ARM)
- #define _CC_HAS_RTT_ASM_SUPPORT 1
- #if (defined __ARM_ARCH_7M__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #elif (defined __ARM_ARCH_7EM__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() __asm volatile ("dmb\n" : : :);
- #elif (defined __ARM_ARCH_8M_BASE__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 0
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() __asm volatile ("dmb\n" : : :);
- #elif (defined __ARM_ARCH_8M_MAIN__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() __asm volatile ("dmb\n" : : :);
- #else
- #define _CORE_HAS_RTT_ASM_SUPPORT 0
- #endif
- #elif (defined __ARMCC_VERSION)
-
-
-
-
-
- #if (__ARMCC_VERSION >= 6000000)
- #define _CC_HAS_RTT_ASM_SUPPORT 1
- #else
- #define _CC_HAS_RTT_ASM_SUPPORT 0
- #endif
- #if (defined __ARM_ARCH_6M__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 0
- #elif (defined __ARM_ARCH_7M__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #elif (defined __ARM_ARCH_7EM__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() __asm volatile ("dmb\n" : : :);
- #elif (defined __ARM_ARCH_8M_BASE__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 0
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() __asm volatile ("dmb\n" : : :);
- #elif (defined __ARM_ARCH_8M_MAIN__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() __asm volatile ("dmb\n" : : :);
- #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__))
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() __asm volatile ("dmb\n" : : :);
- #else
- #define _CORE_HAS_RTT_ASM_SUPPORT 0
- #endif
- #elif ((defined __GNUC__) || (defined __clang__))
-
-
-
- #define _CC_HAS_RTT_ASM_SUPPORT 1
-
- #if (defined __ARM_ARCH_7M__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #elif (defined __ARM_ARCH_7EM__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() __asm volatile ("dmb\n" : : :);
- #elif (defined __ARM_ARCH_8M_BASE__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 0
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() __asm volatile ("dmb\n" : : :);
- #elif (defined __ARM_ARCH_8M_MAIN__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() __asm volatile ("dmb\n" : : :);
- #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__))
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() __asm volatile ("dmb\n" : : :);
- #else
- #define _CORE_HAS_RTT_ASM_SUPPORT 0
- #endif
- #elif ((defined __IASMARM__) || (defined __ICCARM__))
-
-
-
- #define _CC_HAS_RTT_ASM_SUPPORT 1
- #if (__VER__ < 6300000)
- #define VOLATILE
- #else
- #define VOLATILE volatile
- #endif
- #if (defined __ARM7M__)
- #if (__CORE__ == __ARM7M__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #endif
- #endif
- #if (defined __ARM7EM__)
- #if (__CORE__ == __ARM7EM__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() asm VOLATILE ("DMB");
- #endif
- #endif
- #if (defined __ARM8M_BASELINE__)
- #if (__CORE__ == __ARM8M_BASELINE__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 0
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() asm VOLATILE ("DMB");
- #endif
- #endif
- #if (defined __ARM8M_MAINLINE__)
- #if (__CORE__ == __ARM8M_MAINLINE__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() asm VOLATILE ("DMB");
- #endif
- #endif
- #if (defined __ARM8EM_MAINLINE__)
- #if (__CORE__ == __ARM8EM_MAINLINE__)
- #define _CORE_HAS_RTT_ASM_SUPPORT 1
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() asm VOLATILE ("DMB");
- #endif
- #endif
- #if (defined __ARM7A__)
- #if (__CORE__ == __ARM7A__)
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() asm VOLATILE ("DMB");
- #endif
- #endif
- #if (defined __ARM7R__)
- #if (__CORE__ == __ARM7R__)
- #define _CORE_NEEDS_DMB 1
- #define RTT__DMB() asm VOLATILE ("DMB");
- #endif
- #endif
- #else
-
-
-
- #define _CC_HAS_RTT_ASM_SUPPORT 0
- #define _CORE_HAS_RTT_ASM_SUPPORT 0
- #endif
-
-
-
- #ifndef _CORE_HAS_RTT_ASM_SUPPORT
- #define _CORE_HAS_RTT_ASM_SUPPORT 0
- #endif
- #if (_CC_HAS_RTT_ASM_SUPPORT && _CORE_HAS_RTT_ASM_SUPPORT)
- #define RTT_USE_ASM (0)
- #else
- #define RTT_USE_ASM (0)
- #endif
- #endif
- #ifndef _CORE_NEEDS_DMB
- #define _CORE_NEEDS_DMB 0
- #endif
- #ifndef RTT__DMB
- #if _CORE_NEEDS_DMB
- #error "Don't know how to place inline assembly for DMB"
- #else
- #define RTT__DMB()
- #endif
- #endif
- #ifndef SEGGER_RTT_CPU_CACHE_LINE_SIZE
- #define SEGGER_RTT_CPU_CACHE_LINE_SIZE (0)
- #endif
- #ifndef SEGGER_RTT_UNCACHED_OFF
- #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
- #error "SEGGER_RTT_UNCACHED_OFF must be defined when setting SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
- #else
- #define SEGGER_RTT_UNCACHED_OFF (0)
- #endif
- #endif
- #if RTT_USE_ASM
- #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
- #error "RTT_USE_ASM is not available if SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
- #endif
- #endif
- #ifndef SEGGER_RTT_ASM
- #include <stdlib.h>
- #include <stdarg.h>
- #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
- #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)
- #else
- #define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (NumBytes)
- #endif
- #define SEGGER_RTT__CB_SIZE (16 + 4 + 4 + (SEGGER_RTT_MAX_NUM_UP_BUFFERS * 24) + (SEGGER_RTT_MAX_NUM_DOWN_BUFFERS * 24))
- #define SEGGER_RTT__CB_PADDING (SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(SEGGER_RTT__CB_SIZE) - SEGGER_RTT__CB_SIZE)
- typedef struct {
- const char* sName;
- char* pBuffer;
- unsigned SizeOfBuffer;
- unsigned WrOff;
- volatile unsigned RdOff;
- unsigned Flags;
- } SEGGER_RTT_BUFFER_UP;
- typedef struct {
- const char* sName;
- char* pBuffer;
- unsigned SizeOfBuffer;
- volatile unsigned WrOff;
- unsigned RdOff;
- unsigned Flags;
- } SEGGER_RTT_BUFFER_DOWN;
- typedef struct {
- char acID[16];
- int MaxNumUpBuffers;
- int MaxNumDownBuffers;
- SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS];
- SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS];
- #if SEGGER_RTT__CB_PADDING
- unsigned char aDummy[SEGGER_RTT__CB_PADDING];
- #endif
- } SEGGER_RTT_CB;
- extern SEGGER_RTT_CB _SEGGER_RTT;
- #ifdef __cplusplus
- extern "C" {
- #endif
- int SEGGER_RTT_AllocDownBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
- int SEGGER_RTT_AllocUpBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
- int SEGGER_RTT_ConfigUpBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
- int SEGGER_RTT_ConfigDownBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
- int SEGGER_RTT_GetKey (void);
- unsigned SEGGER_RTT_HasData (unsigned BufferIndex);
- int SEGGER_RTT_HasKey (void);
- unsigned SEGGER_RTT_HasDataUp (unsigned BufferIndex);
- void SEGGER_RTT_Init (void);
- unsigned SEGGER_RTT_Read (unsigned BufferIndex, void* pBuffer, unsigned BufferSize);
- unsigned SEGGER_RTT_ReadNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize);
- int SEGGER_RTT_SetNameDownBuffer (unsigned BufferIndex, const char* sName);
- int SEGGER_RTT_SetNameUpBuffer (unsigned BufferIndex, const char* sName);
- int SEGGER_RTT_SetFlagsDownBuffer (unsigned BufferIndex, unsigned Flags);
- int SEGGER_RTT_SetFlagsUpBuffer (unsigned BufferIndex, unsigned Flags);
- int SEGGER_RTT_WaitKey (void);
- unsigned SEGGER_RTT_Write (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
- unsigned SEGGER_RTT_WriteNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
- unsigned SEGGER_RTT_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
- unsigned SEGGER_RTT_ASM_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
- unsigned SEGGER_RTT_WriteString (unsigned BufferIndex, const char* s);
- void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
- unsigned SEGGER_RTT_PutChar (unsigned BufferIndex, char c);
- unsigned SEGGER_RTT_PutCharSkip (unsigned BufferIndex, char c);
- unsigned SEGGER_RTT_PutCharSkipNoLock (unsigned BufferIndex, char c);
- unsigned SEGGER_RTT_GetAvailWriteSpace (unsigned BufferIndex);
- unsigned SEGGER_RTT_GetBytesInBuffer (unsigned BufferIndex);
- #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)
- #if RTT_USE_ASM
- #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock
- #endif
- unsigned SEGGER_RTT_ReadUpBuffer (unsigned BufferIndex, void* pBuffer, unsigned BufferSize);
- unsigned SEGGER_RTT_ReadUpBufferNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize);
- unsigned SEGGER_RTT_WriteDownBuffer (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
- unsigned SEGGER_RTT_WriteDownBufferNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
- #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)
- int SEGGER_RTT_SetTerminal (unsigned char TerminalId);
- int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s);
- int SEGGER_RTT_printf(const char * sFormat, ...);
- int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList);
- #ifdef __cplusplus
- }
- #endif
- #endif
- #define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0)
- #define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1)
- #define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2)
- #define SEGGER_RTT_MODE_MASK (3)
- #define RTT_CTRL_RESET "\x1B[0m"
- #define RTT_CTRL_CLEAR "\x1B[2J"
- #define RTT_CTRL_TEXT_BLACK "\x1B[2;30m"
- #define RTT_CTRL_TEXT_RED "\x1B[2;31m"
- #define RTT_CTRL_TEXT_GREEN "\x1B[2;32m"
- #define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m"
- #define RTT_CTRL_TEXT_BLUE "\x1B[2;34m"
- #define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m"
- #define RTT_CTRL_TEXT_CYAN "\x1B[2;36m"
- #define RTT_CTRL_TEXT_WHITE "\x1B[2;37m"
- #define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m"
- #define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m"
- #define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m"
- #define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m"
- #define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m"
- #define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m"
- #define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m"
- #define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m"
- #define RTT_CTRL_BG_BLACK "\x1B[24;40m"
- #define RTT_CTRL_BG_RED "\x1B[24;41m"
- #define RTT_CTRL_BG_GREEN "\x1B[24;42m"
- #define RTT_CTRL_BG_YELLOW "\x1B[24;43m"
- #define RTT_CTRL_BG_BLUE "\x1B[24;44m"
- #define RTT_CTRL_BG_MAGENTA "\x1B[24;45m"
- #define RTT_CTRL_BG_CYAN "\x1B[24;46m"
- #define RTT_CTRL_BG_WHITE "\x1B[24;47m"
- #define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m"
- #define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m"
- #define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m"
- #define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m"
- #define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m"
- #define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m"
- #define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m"
- #define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m"
- #endif
|