DIY Logging Volt/Ampmeter
|
Go to the documentation of this file.
83 #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
84 #ifdef SEGGER_RTT_CB_ALIGN
85 #error "Custom SEGGER_RTT_CB_ALIGN() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
87 #ifdef SEGGER_RTT_BUFFER_ALIGN
88 #error "Custom SEGGER_RTT_BUFFER_ALIGN() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
90 #ifdef SEGGER_RTT_PUT_CB_SECTION
91 #error "Custom SEGGER_RTT_PUT_CB_SECTION() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
93 #ifdef SEGGER_RTT_PUT_BUFFER_SECTION
94 #error "Custom SEGGER_RTT_PUT_BUFFER_SECTION() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
96 #ifdef SEGGER_RTT_BUFFER_ALIGNMENT
97 #error "Custom SEGGER_RTT_BUFFER_ALIGNMENT is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
99 #ifdef SEGGER_RTT_ALIGNMENT
100 #error "Custom SEGGER_RTT_ALIGNMENT is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
104 #ifndef BUFFER_SIZE_UP
105 #define BUFFER_SIZE_UP 1024 // Size of the buffer for terminal output of target, up to host
108 #ifndef BUFFER_SIZE_DOWN
109 #define BUFFER_SIZE_DOWN 16 // Size of the buffer for terminal input to target from host (Usually keyboard input)
112 #ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS
113 #define SEGGER_RTT_MAX_NUM_UP_BUFFERS 2 // Number of up-buffers (T->H) available on this target
116 #ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS
117 #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS 2 // Number of down-buffers (H->T) available on this target
120 #ifndef SEGGER_RTT_BUFFER_SECTION
121 #if defined(SEGGER_RTT_SECTION)
122 #define SEGGER_RTT_BUFFER_SECTION SEGGER_RTT_SECTION
126 #ifndef SEGGER_RTT_ALIGNMENT
127 #define SEGGER_RTT_ALIGNMENT SEGGER_RTT_CPU_CACHE_LINE_SIZE
130 #ifndef SEGGER_RTT_BUFFER_ALIGNMENT
131 #define SEGGER_RTT_BUFFER_ALIGNMENT SEGGER_RTT_CPU_CACHE_LINE_SIZE
134 #ifndef SEGGER_RTT_MODE_DEFAULT
135 #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP
138 #ifndef SEGGER_RTT_LOCK
139 #define SEGGER_RTT_LOCK()
142 #ifndef SEGGER_RTT_UNLOCK
143 #define SEGGER_RTT_UNLOCK()
147 #define STRLEN(a) strlen((a))
151 #define STRCPY(pDest, pSrc) strcpy((pDest), (pSrc))
154 #ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP
155 #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0
158 #ifndef SEGGER_RTT_MEMCPY
160 #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) MEMCPY((pDest), (pSrc), (NumBytes))
162 #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) memcpy((pDest), (pSrc), (NumBytes))
167 #define MIN(a, b) (((a) < (b)) ? (a) : (b))
171 #define MAX(a, b) (((a) > (b)) ? (a) : (b))
186 #if (defined __ICCARM__) || (defined __ICCRX__)
187 #define RTT_PRAGMA(P) _Pragma(#P)
190 #if SEGGER_RTT_ALIGNMENT || SEGGER_RTT_BUFFER_ALIGNMENT
191 #if (defined __GNUC__)
192 #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment)))
193 #elif (defined __ICCARM__) || (defined __ICCRX__)
194 #define PRAGMA(A) _Pragma(#A)
195 #define SEGGER_RTT_ALIGN(Var, Alignment) RTT_PRAGMA(data_alignment=Alignment) \
197 #elif (defined __CC_ARM)
198 #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment)))
200 #error "Alignment not supported for this compiler."
203 #define SEGGER_RTT_ALIGN(Var, Alignment) Var
206 #if defined(SEGGER_RTT_SECTION) || defined (SEGGER_RTT_BUFFER_SECTION)
207 #if (defined __GNUC__)
208 #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section))) Var
209 #elif (defined __ICCARM__) || (defined __ICCRX__)
210 #define SEGGER_RTT_PUT_SECTION(Var, Section) RTT_PRAGMA(location=Section) \
212 #elif (defined __CC_ARM)
213 #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section), zero_init)) Var
215 #error "Section placement not supported for this compiler."
218 #define SEGGER_RTT_PUT_SECTION(Var, Section) Var
221 #if SEGGER_RTT_ALIGNMENT
222 #define SEGGER_RTT_CB_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_ALIGNMENT)
224 #define SEGGER_RTT_CB_ALIGN(Var) Var
227 #if SEGGER_RTT_BUFFER_ALIGNMENT
228 #define SEGGER_RTT_BUFFER_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_BUFFER_ALIGNMENT)
230 #define SEGGER_RTT_BUFFER_ALIGN(Var) Var
234 #if defined(SEGGER_RTT_SECTION)
235 #define SEGGER_RTT_PUT_CB_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_SECTION)
237 #define SEGGER_RTT_PUT_CB_SECTION(Var) Var
240 #if defined(SEGGER_RTT_BUFFER_SECTION)
241 #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_BUFFER_SECTION)
243 #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) Var
253 static unsigned char _aTerminalId[16] = {
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F' };
288 volatile SEGGER_RTT_CB* pRTTCBInit; \
289 pRTTCBInit = (volatile SEGGER_RTT_CB*)((char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); \
291 if (pRTTCBInit->acID[0] == '\0') { \
356 unsigned NumBytesToWrite;
357 unsigned NumBytesWritten;
364 NumBytesWritten = 0u;
365 WrOff = pRing->
WrOff;
367 RdOff = pRing->
RdOff;
369 NumBytesToWrite = RdOff - WrOff - 1u;
371 NumBytesToWrite = pRing->
SizeOfBuffer - (WrOff - RdOff + 1u);
374 NumBytesToWrite =
MIN(NumBytesToWrite, NumBytes);
376 #if SEGGER_RTT_MEMCPY_USE_BYTELOOP
377 NumBytesWritten += NumBytesToWrite;
378 NumBytes -= NumBytesToWrite;
379 WrOff += NumBytesToWrite;
380 while (NumBytesToWrite--) {
381 *pDst++ = *pBuffer++;
385 NumBytesWritten += NumBytesToWrite;
386 pBuffer += NumBytesToWrite;
387 NumBytes -= NumBytesToWrite;
388 WrOff += NumBytesToWrite;
394 pRing->
WrOff = WrOff;
396 return NumBytesWritten;
418 unsigned NumBytesAtOnce;
423 WrOff = pRing->
WrOff;
425 if (Rem > NumBytes) {
430 #if SEGGER_RTT_MEMCPY_USE_BYTELOOP
436 pRing->
WrOff = WrOff;
440 pRing->
WrOff = WrOff + NumBytes;
446 #if SEGGER_RTT_MEMCPY_USE_BYTELOOP
448 NumBytesAtOnce = Rem;
449 while (NumBytesAtOnce--) {
453 NumBytesAtOnce = NumBytes - Rem;
454 while (NumBytesAtOnce--) {
458 pRing->
WrOff = NumBytes - Rem;
460 NumBytesAtOnce = Rem;
463 NumBytesAtOnce = NumBytes - Rem;
467 pRing->
WrOff = NumBytesAtOnce;
515 RdOff = pRing->
RdOff;
516 WrOff = pRing->
WrOff;
517 if (RdOff <= WrOff) {
520 r = RdOff - WrOff - 1u;
555 unsigned NumBytesRem;
556 unsigned NumBytesRead;
559 unsigned char* pBuffer;
565 pBuffer = (
unsigned char*)pData;
566 RdOff = pRing->
RdOff;
567 WrOff = pRing->
WrOff;
574 NumBytesRem =
MIN(NumBytesRem, BufferSize);
576 #if SEGGER_RTT_MEMCPY_USE_BYTELOOP
577 NumBytesRead += NumBytesRem;
578 BufferSize -= NumBytesRem;
579 RdOff += NumBytesRem;
580 while (NumBytesRem--) {
581 *pBuffer++ = *pSrc++;
585 NumBytesRead += NumBytesRem;
586 pBuffer += NumBytesRem;
587 BufferSize -= NumBytesRem;
588 RdOff += NumBytesRem;
600 NumBytesRem = WrOff - RdOff;
601 NumBytesRem =
MIN(NumBytesRem, BufferSize);
602 if (NumBytesRem > 0u) {
604 #if SEGGER_RTT_MEMCPY_USE_BYTELOOP
605 NumBytesRead += NumBytesRem;
606 BufferSize -= NumBytesRem;
607 RdOff += NumBytesRem;
608 while (NumBytesRem--) {
609 *pBuffer++ = *pSrc++;
613 NumBytesRead += NumBytesRem;
614 pBuffer += NumBytesRem;
615 BufferSize -= NumBytesRem;
616 RdOff += NumBytesRem;
623 pRing->
RdOff = RdOff;
647 unsigned NumBytesRem;
648 unsigned NumBytesRead;
651 unsigned char* pBuffer;
657 pBuffer = (
unsigned char*)pData;
658 RdOff = pRing->
RdOff;
659 WrOff = pRing->
WrOff;
666 NumBytesRem =
MIN(NumBytesRem, BufferSize);
668 #if SEGGER_RTT_MEMCPY_USE_BYTELOOP
669 NumBytesRead += NumBytesRem;
670 BufferSize -= NumBytesRem;
671 RdOff += NumBytesRem;
672 while (NumBytesRem--) {
673 *pBuffer++ = *pSrc++;
677 NumBytesRead += NumBytesRem;
678 pBuffer += NumBytesRem;
679 BufferSize -= NumBytesRem;
680 RdOff += NumBytesRem;
692 NumBytesRem = WrOff - RdOff;
693 NumBytesRem =
MIN(NumBytesRem, BufferSize);
694 if (NumBytesRem > 0u) {
696 #if SEGGER_RTT_MEMCPY_USE_BYTELOOP
697 NumBytesRead += NumBytesRem;
698 BufferSize -= NumBytesRem;
699 RdOff += NumBytesRem;
700 while (NumBytesRem--) {
701 *pBuffer++ = *pSrc++;
705 NumBytesRead += NumBytesRem;
706 pBuffer += NumBytesRem;
707 BufferSize -= NumBytesRem;
708 RdOff += NumBytesRem;
712 pRing->
RdOff = RdOff;
744 unsigned NumBytesRead;
776 unsigned NumBytesRead;
822 pData = (
const char *)pBuffer;
834 if (NumBytes > Avail) {
835 pRing->
RdOff += (NumBytes - Avail);
845 if (Avail > NumBytes) {
850 #if SEGGER_RTT_MEMCPY_USE_BYTELOOP
856 pRing->
WrOff += Avail;
860 pRing->
WrOff += NumBytes;
868 #if SEGGER_RTT_MEMCPY_USE_BYTELOOP
914 #if (RTT_USE_ASM == 0)
933 pData = (
const char *)pBuffer;
935 RdOff = pRing->
RdOff;
936 WrOff = pRing->
WrOff;
937 if (RdOff <= WrOff) {
939 if (Avail >= NumBytes) {
942 memcpy((
void*)pDst, pData, NumBytes);
944 pRing->
WrOff = WrOff + NumBytes;
948 if (Avail >= NumBytes) {
951 memcpy((
void*)pDst, pData, Rem);
961 memcpy((
void*)pDst, pData + Rem, NumBytes);
964 pRing->
WrOff = NumBytes;
968 Avail = RdOff - WrOff - 1u;
969 if (Avail >= NumBytes) {
1014 pData = (
const char *)pBuffer;
1019 switch (pRing->
Flags) {
1026 if (Avail < NumBytes) {
1038 Status = Avail < NumBytes ? Avail : NumBytes;
1088 pData = (
const char *)pBuffer;
1093 switch (pRing->
Flags) {
1100 if (Avail < NumBytes) {
1112 Status = Avail < NumBytes ? Avail : NumBytes;
1249 volatile char* pDst;
1257 WrOff = pRing->
WrOff + 1;
1264 if (WrOff != pRing->
RdOff) {
1268 pRing->
WrOff = WrOff;
1299 volatile char* pDst;
1312 WrOff = pRing->
WrOff + 1;
1319 if (WrOff != pRing->
RdOff) {
1323 pRing->
WrOff = WrOff;
1358 volatile char* pDst;
1371 WrOff = pRing->
WrOff + 1;
1379 while (WrOff == pRing->
RdOff) {
1386 if (WrOff != pRing->
RdOff) {
1390 pRing->
WrOff = WrOff;
1423 r = (int)(
unsigned char)c;
1475 RdOff = pRing->
RdOff;
1476 if (RdOff != pRing->
WrOff) {
1502 return v - pRing->
RdOff;
1523 return pRing->
WrOff - v;
1558 }
while (BufferIndex < pRTTCB->MaxNumDownBuffers);
1559 if (BufferIndex < pRTTCB->MaxNumDownBuffers) {
1606 }
while (BufferIndex < pRTTCB->MaxNumUpBuffers);
1607 if (BufferIndex < pRTTCB->MaxNumUpBuffers) {
1608 pRTTCB->
aUp[BufferIndex].
sName = sName;
1609 pRTTCB->
aUp[BufferIndex].
pBuffer = (
char*)pBuffer;
1611 pRTTCB->
aUp[BufferIndex].
RdOff = 0u;
1612 pRTTCB->
aUp[BufferIndex].
WrOff = 0u;
1613 pRTTCB->
aUp[BufferIndex].
Flags = Flags;
1655 if (BufferIndex > 0u) {
1656 pRTTCB->
aUp[BufferIndex].
sName = sName;
1657 pRTTCB->
aUp[BufferIndex].
pBuffer = (
char*)pBuffer;
1659 pRTTCB->
aUp[BufferIndex].
RdOff = 0u;
1660 pRTTCB->
aUp[BufferIndex].
WrOff = 0u;
1662 pRTTCB->
aUp[BufferIndex].
Flags = Flags;
1704 if (BufferIndex > 0u) {
1745 pRTTCB->
aUp[BufferIndex].
sName = sName;
1811 pRTTCB->
aUp[BufferIndex].
Flags = Flags;
1884 unsigned char ac[2];
1963 if (Avail < (FragLen + 4u)) {
1981 Status = (int)
_WriteBlocking(pRing, s, (FragLen < (Avail - 4u)) ? FragLen : (Avail - 4u));
2051 RdOff = pRTTCB->
aUp[BufferIndex].
RdOff;
2052 WrOff = pRTTCB->
aUp[BufferIndex].
WrOff;
2053 if (RdOff <= WrOff) {
unsigned SEGGER_RTT_HasDataUp(unsigned BufferIndex)
int SEGGER_RTT_AllocUpBuffer(const char *sName, void *pBuffer, unsigned BufferSize, unsigned Flags)
unsigned SEGGER_RTT_WriteSkipNoLock(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
#define SEGGER_RTT_MODE_DEFAULT
unsigned SEGGER_RTT_WriteDownBuffer(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
#define SEGGER_RTT_UNLOCK()
unsigned SEGGER_RTT_PutCharSkip(unsigned BufferIndex, char c)
#define STRCPY(pDest, pSrc)
unsigned SEGGER_RTT_WriteDownBufferNoLock(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
unsigned SEGGER_RTT_WriteNoLock(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
int SEGGER_RTT_SetFlagsDownBuffer(unsigned BufferIndex, unsigned Flags)
static void _WriteNoCheck(SEGGER_RTT_BUFFER_UP *pRing, const char *pData, unsigned NumBytes)
static unsigned _GetAvailWriteSpace(SEGGER_RTT_BUFFER_UP *pRing)
static unsigned char _aTerminalId[16]
unsigned SEGGER_RTT_GetAvailWriteSpace(unsigned BufferIndex)
int SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char *sName, void *pBuffer, unsigned BufferSize, unsigned Flags)
unsigned SEGGER_RTT_HasData(unsigned BufferIndex)
int SEGGER_RTT_HasKey(void)
unsigned SEGGER_RTT_ReadUpBuffer(unsigned BufferIndex, void *pBuffer, unsigned BufferSize)
int SEGGER_RTT_TerminalOut(unsigned char TerminalId, const char *s)
#define SEGGER_RTT_PUT_CB_SECTION(Var)
int SEGGER_RTT_SetNameUpBuffer(unsigned BufferIndex, const char *sName)
int SEGGER_RTT_GetKey(void)
#define SEGGER_RTT_MODE_MASK
SEGGER_RTT_BUFFER_UP aUp[(3)]
static char _acUpBuffer[((1024))]
unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void *pData, unsigned BufferSize)
#define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes)
int SEGGER_RTT_AllocDownBuffer(const char *sName, void *pBuffer, unsigned BufferSize, unsigned Flags)
#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL
unsigned SEGGER_RTT_PutChar(unsigned BufferIndex, char c)
int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char *sName, void *pBuffer, unsigned BufferSize, unsigned Flags)
void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
unsigned SEGGER_RTT_Read(unsigned BufferIndex, void *pBuffer, unsigned BufferSize)
#define SEGGER_RTT_PUT_BUFFER_SECTION(Var)
static unsigned char _ActiveTerminal
static char _acDownBuffer[((16))]
int SEGGER_RTT_WaitKey(void)
SEGGER_RTT_CB _SEGGER_RTT
unsigned SEGGER_RTT_WriteString(unsigned BufferIndex, const char *s)
#define SEGGER_RTT_LOCK()
#define SEGGER_RTT_MODE_NO_BLOCK_TRIM
unsigned SEGGER_RTT_GetBytesInBuffer(unsigned BufferIndex)
static unsigned _WriteBlocking(SEGGER_RTT_BUFFER_UP *pRing, const char *pBuffer, unsigned NumBytes)
int SEGGER_RTT_SetTerminal(unsigned char TerminalId)
int SEGGER_RTT_SetNameDownBuffer(unsigned BufferIndex, const char *sName)
static void _PostTerminalSwitch(SEGGER_RTT_BUFFER_UP *pRing, unsigned char TerminalId)
#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS
#define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes)
unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
SEGGER_RTT_BUFFER_DOWN aDown[(3)]
#define SEGGER_RTT_MAX_NUM_UP_BUFFERS
static void _DoInit(void)
int SEGGER_RTT_SetFlagsUpBuffer(unsigned BufferIndex, unsigned Flags)
#define SEGGER_RTT_CB_ALIGN(Var)
#define SEGGER_RTT_UNCACHED_OFF
#define SEGGER_RTT_MODE_NO_BLOCK_SKIP
unsigned SEGGER_RTT_PutCharSkipNoLock(unsigned BufferIndex, char c)
void SEGGER_RTT_Init(void)
#define SEGGER_RTT_BUFFER_ALIGN(Var)
unsigned SEGGER_RTT_ReadUpBufferNoLock(unsigned BufferIndex, void *pData, unsigned BufferSize)