refactor: 完成R8裸机lwIP移植并更新文档
This commit is contained in:
+59
@@ -0,0 +1,59 @@
|
||||
#include "SEGGER_RTT.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
SEGGER_RTT_CB _SEGGER_RTT;
|
||||
static char _acUpBuffer[BUFFER_SIZE_UP];
|
||||
|
||||
void SEGGER_RTT_Init(void)
|
||||
{
|
||||
memset(&_SEGGER_RTT, 0, sizeof(_SEGGER_RTT));
|
||||
memcpy(_SEGGER_RTT.acID, "SEGGER RTT", 10);
|
||||
_SEGGER_RTT.MaxNumUpBuffers = SEGGER_RTT_MAX_NUM_UP_BUFFERS;
|
||||
_SEGGER_RTT.MaxNumDownBuffers = SEGGER_RTT_MAX_NUM_DOWN_BUFFERS;
|
||||
_SEGGER_RTT.aUp[0].sName = "Terminal";
|
||||
_SEGGER_RTT.aUp[0].pBuffer = _acUpBuffer;
|
||||
_SEGGER_RTT.aUp[0].SizeOfBuffer = BUFFER_SIZE_UP;
|
||||
_SEGGER_RTT.aUp[0].Flags = SEGGER_RTT_MODE_DEFAULT;
|
||||
}
|
||||
|
||||
static void _EnsureInit(void)
|
||||
{
|
||||
if (_SEGGER_RTT.acID[0] != 'S') {
|
||||
SEGGER_RTT_Init();
|
||||
}
|
||||
}
|
||||
|
||||
unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)
|
||||
{
|
||||
SEGGER_RTT_BUFFER_UP *ring;
|
||||
const char *data = (const char *)pBuffer;
|
||||
unsigned i;
|
||||
|
||||
_EnsureInit();
|
||||
if (BufferIndex >= (unsigned)_SEGGER_RTT.MaxNumUpBuffers) {
|
||||
return 0u;
|
||||
}
|
||||
|
||||
ring = &_SEGGER_RTT.aUp[BufferIndex];
|
||||
for (i = 0; i < NumBytes; ++i) {
|
||||
unsigned next = (ring->WrOff + 1u) % ring->SizeOfBuffer;
|
||||
if (next == ring->RdOff) {
|
||||
break;
|
||||
}
|
||||
ring->pBuffer[ring->WrOff] = data[i];
|
||||
ring->WrOff = next;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
unsigned SEGGER_RTT_WriteString(unsigned BufferIndex, const char *s)
|
||||
{
|
||||
return SEGGER_RTT_Write(BufferIndex, s, (unsigned)strlen(s));
|
||||
}
|
||||
|
||||
unsigned SEGGER_RTT_PutChar(unsigned BufferIndex, char c)
|
||||
{
|
||||
return SEGGER_RTT_Write(BufferIndex, &c, 1u);
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
#ifndef SEGGER_RTT_H
|
||||
#define SEGGER_RTT_H
|
||||
|
||||
#include "SEGGER_RTT_Conf.h"
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#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)
|
||||
|
||||
typedef struct {
|
||||
const char *sName;
|
||||
char *pBuffer;
|
||||
unsigned SizeOfBuffer;
|
||||
unsigned WrOff;
|
||||
volatile unsigned RdOff;
|
||||
unsigned Flags;
|
||||
} SEGGER_RTT_BUFFER_UP;
|
||||
|
||||
typedef struct {
|
||||
char acID[16];
|
||||
int MaxNumUpBuffers;
|
||||
int MaxNumDownBuffers;
|
||||
SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS];
|
||||
} SEGGER_RTT_CB;
|
||||
|
||||
extern SEGGER_RTT_CB _SEGGER_RTT;
|
||||
|
||||
void SEGGER_RTT_Init(void);
|
||||
unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes);
|
||||
unsigned SEGGER_RTT_WriteString(unsigned BufferIndex, const char *s);
|
||||
unsigned SEGGER_RTT_PutChar(unsigned BufferIndex, char c);
|
||||
int SEGGER_RTT_printf(unsigned BufferIndex, const char *sFormat, ...);
|
||||
int SEGGER_RTT_vprintf(unsigned BufferIndex, const char *sFormat, va_list *pParamList);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,37 @@
|
||||
/*********************************************************************
|
||||
* SEGGER Microcontroller GmbH *
|
||||
* The Embedded Experts *
|
||||
**********************************************************************
|
||||
*/
|
||||
|
||||
#ifndef SEGGER_RTT_CONF_H
|
||||
#define SEGGER_RTT_CONF_H
|
||||
|
||||
#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS
|
||||
#define SEGGER_RTT_MAX_NUM_UP_BUFFERS 3
|
||||
#endif
|
||||
|
||||
#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS
|
||||
#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS 3
|
||||
#endif
|
||||
|
||||
#ifndef BUFFER_SIZE_UP
|
||||
#define BUFFER_SIZE_UP 1024
|
||||
#endif
|
||||
|
||||
#ifndef BUFFER_SIZE_DOWN
|
||||
#define BUFFER_SIZE_DOWN 16
|
||||
#endif
|
||||
|
||||
#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE
|
||||
#define SEGGER_RTT_PRINTF_BUFFER_SIZE 128u
|
||||
#endif
|
||||
|
||||
#ifndef SEGGER_RTT_MODE_DEFAULT
|
||||
#define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP
|
||||
#endif
|
||||
|
||||
#define SEGGER_RTT_LOCK()
|
||||
#define SEGGER_RTT_UNLOCK()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,30 @@
|
||||
#include "SEGGER_RTT.h"
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int SEGGER_RTT_vprintf(unsigned BufferIndex, const char *sFormat, va_list *pParamList)
|
||||
{
|
||||
char buffer[SEGGER_RTT_PRINTF_BUFFER_SIZE];
|
||||
int len = vsnprintf(buffer, sizeof(buffer), sFormat, *pParamList);
|
||||
|
||||
if (len < 0) {
|
||||
return len;
|
||||
}
|
||||
if ((unsigned)len > sizeof(buffer)) {
|
||||
len = (int)sizeof(buffer);
|
||||
}
|
||||
|
||||
return (int)SEGGER_RTT_Write(BufferIndex, buffer, (unsigned)len);
|
||||
}
|
||||
|
||||
int SEGGER_RTT_printf(unsigned BufferIndex, const char *sFormat, ...)
|
||||
{
|
||||
int result;
|
||||
va_list args;
|
||||
|
||||
va_start(args, sFormat);
|
||||
result = SEGGER_RTT_vprintf(BufferIndex, sFormat, &args);
|
||||
va_end(args);
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user