refactor: 完成R8裸机lwIP移植并更新文档

This commit is contained in:
2026-03-30 18:08:54 +08:00
parent 68c64959c7
commit 9efa2cdc59
24 changed files with 1845 additions and 3619 deletions
+59
View File
@@ -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
View File
@@ -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
+37
View File
@@ -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
+30
View File
@@ -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;
}