From fc00bd72e808290a905d7faad6348a1f5082ac0c Mon Sep 17 00:00:00 2001 From: coffee Date: Mon, 27 Oct 2025 23:50:20 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=BC=98=E5=8C=96=E7=8E=AF=E7=8A=B6?= =?UTF-8?q?=E6=95=B0=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/HDRPC.h | 1 + src/HRingBuffer.c | 29 +++++++++++++++++------------ src/HTimer.c | 4 ++++ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/include/HDRPC.h b/include/HDRPC.h index 0aa26d3..0489957 100644 --- a/include/HDRPC.h +++ b/include/HDRPC.h @@ -264,6 +264,7 @@ HDRPCValue_t _HDRPCGetValue(HDRPCSession *session, uint8_t type, uint8_t index); * @return 参数 */ void *_HDRPCGetData(HDRPCSession *session, uint8_t type, uint8_t index, uint8_t *len); +#define HDRPCGetCharData(session, index, len) (char *)_HDRPCGetData(session, kHDRPCBuffer, index, len) #define HDRPCGetData(session, index, len) (uint8_t *)_HDRPCGetData(session, kHDRPCBuffer, index, len) #define HDRPCGetUserData(session, index, len) (uint8_t *)_HDRPCGetData(session, kHDRPCUserData, index, len) #define HDRPCGetString(session, index, len) (uint16_t *)_HDRPCGetData(session, kHDRPCString, index, len) diff --git a/src/HRingBuffer.c b/src/HRingBuffer.c index a5b740a..32c1302 100644 --- a/src/HRingBuffer.c +++ b/src/HRingBuffer.c @@ -14,7 +14,7 @@ #endif -static void InitRingBuffer(HRingBufferType *ringBuffer) { +static inline void InitRingBuffer(HRingBufferType *ringBuffer) { if (ringBuffer == NULL) { LogD("RingBuffer is NULL"); return ; @@ -34,7 +34,7 @@ static void InitRingBuffer(HRingBufferType *ringBuffer) { base->end = _HRING_BUFFER_INIT_SIZE_INIT(len); } -static uint8_t GetRingBufferType(const HRingBufferType *ringBuffer) { +static inline uint8_t GetRingBufferType(const HRingBufferType *ringBuffer) { if (ringBuffer == NULL) { return 0; } @@ -44,7 +44,7 @@ static uint8_t GetRingBufferType(const HRingBufferType *ringBuffer) { return base->flag & kHRingBufferFlagAllMask; } -static HRingBufferLenType GetRingBufferTypeSize(const HRingBufferType *ringBuffer) { +static inline HRingBufferLenType GetRingBufferTypeSize(const HRingBufferType *ringBuffer) { switch(GetRingBufferType(ringBuffer)) { case kHRingBufferFlag8: return sizeof(uint8_t); break; case kHRingBufferFlag16: return sizeof(uint16_t); break; @@ -54,7 +54,7 @@ static HRingBufferLenType GetRingBufferTypeSize(const HRingBufferType *ringBuffe return 0; } -static HRingBufferDataType GetRingBufferData(const HRingBufferType *ringBuffer, HRingBufferLenType pos) { +static inline HRingBufferDataType GetRingBufferData(const HRingBufferType *ringBuffer, HRingBufferLenType pos) { switch(GetRingBufferType(ringBuffer)) { case kHRingBufferFlag8: return ((const _HRingBuffer8 *)ringBuffer)->data[pos]; break; case kHRingBufferFlag16: return ((const _HRingBuffer16 *)ringBuffer)->data[pos]; break; @@ -64,7 +64,7 @@ static HRingBufferDataType GetRingBufferData(const HRingBufferType *ringBuffer, return HRING_BUFFER_ERROR; } -static const uint8_t *GetRingByteData(const HRingBufferType *ringBuffer, HRingBufferLenType pos) { +static inline const uint8_t *GetRingByteData(const HRingBufferType *ringBuffer, HRingBufferLenType pos) { const void *result = NULL; switch(GetRingBufferType(ringBuffer)) { case kHRingBufferFlag8: result = &((const _HRingBuffer8 *)ringBuffer)->data[pos]; break; @@ -75,7 +75,7 @@ static const uint8_t *GetRingByteData(const HRingBufferType *ringBuffer, HRingBu return (const uint8_t *)result; } -static void SetRingBufferData(HRingBufferType *ringBuffer, HRingBufferLenType pos, HRingBufferDataType data) { +static inline void SetRingBufferData(HRingBufferType *ringBuffer, HRingBufferLenType pos, HRingBufferDataType data) { switch(GetRingBufferType(ringBuffer)) { case kHRingBufferFlag8: ((_HRingBuffer8 *)ringBuffer)->data[pos] = (uint8_t)data; break; case kHRingBufferFlag16: ((_HRingBuffer16 *)ringBuffer)->data[pos] = (uint16_t)data; break; @@ -83,7 +83,7 @@ static void SetRingBufferData(HRingBufferType *ringBuffer, HRingBufferLenType po } } -static uint8_t IsRingBufferFull(const HRingBufferType *ringBuffer) { +static inline uint8_t IsRingBufferFull(const HRingBufferType *ringBuffer) { if (ringBuffer == NULL) { return 1; } @@ -93,7 +93,7 @@ static uint8_t IsRingBufferFull(const HRingBufferType *ringBuffer) { return (base->flag & kHRingBufferFull) == kHRingBufferFull; } -static void SetRingBufferFull(HRingBufferType *ringBuffer, uint8_t full) { +static inline void SetRingBufferFull(HRingBufferType *ringBuffer, uint8_t full) { InitRingBuffer((HRingBufferType *)ringBuffer); _HRingBufferBase *base = (_HRingBufferBase *)ringBuffer; if (full) { @@ -106,7 +106,8 @@ static void SetRingBufferFull(HRingBufferType *ringBuffer, uint8_t full) { static void AdjustReadPos(HRingBufferType *ringBuffer, HRingBufferLenType pos) { const uint8_t isFull = IsRingBufferFull(ringBuffer); _HRingBufferBase *base = (_HRingBufferBase *)ringBuffer; - base->start = (base->start + pos) % base->len; + base->start += pos; + base->start -= (base->start >= base->len) * base->len; if (isFull) { SetRingBufferFull(ringBuffer, 0); } @@ -144,7 +145,9 @@ uint8_t HRingBufferAddData(HRingBufferType* buffer, HRingBufferDataType data) { } SetRingBufferData(buffer, base->end, data); - base->end = (base->end + 1) % base->len; + ++base->end; + base->end -= (base->end >= base->len) * base->len; + if (base->end == base->start) { SetRingBufferFull(buffer, 1); } @@ -156,7 +159,8 @@ uint8_t HRingBufferAddData(HRingBufferType* buffer, HRingBufferDataType data) { uint8_t HRingBufferAddDataOver(HRingBufferType* buffer, HRingBufferDataType data) { if (IsRingBufferFull(buffer)) { _HRingBufferBase *base = (_HRingBufferBase *)buffer; - base->start = (base->start + 1) % base->len; + ++base->start; + base->start -= (base->start >= base->len) * base->len; SetRingBufferFull(buffer, 0); } @@ -186,7 +190,8 @@ HRingBufferDataType HRingBufferPopData(HRingBufferType* buffer) { _HRingBufferBase *base = (_HRingBufferBase *)buffer; HRingBufferDataType data = GetRingBufferData(buffer, base->start); - base->start = (base->start + 1) % base->len; + ++base->start; + base->start -= (base->start >= base->len) * base->len; if (IsRingBufferFull(buffer)) { SetRingBufferFull(buffer, 0); } diff --git a/src/HTimer.c b/src/HTimer.c index db8bb94..3c5e782 100644 --- a/src/HTimer.c +++ b/src/HTimer.c @@ -186,6 +186,10 @@ HTimer_t HTimerAdd(uint8_t id, uint32_t ms, HTimerCallType call, eHTimerFlags fl } void HTimerRemove(HTimer_t index) { + if (index == HTIMER_INVALID) { + return ; + } + const uint8_t id = GET_ID(index); index = GET_INDEX(index); if (id >= HTIMER_REGISTER_MAX) {