fifo 支持水位监测和溢出次数统计
This commit is contained in:
+12
-2
@@ -9,18 +9,28 @@
|
|||||||
|
|
||||||
// 在尾部写入数据
|
// 在尾部写入数据
|
||||||
os_err_t fifo_put(fifo_t* self, uint8_t data){
|
os_err_t fifo_put(fifo_t* self, uint8_t data){
|
||||||
|
|
||||||
os_size_t write_idx = self->write_idx;
|
os_size_t write_idx = self->write_idx;
|
||||||
|
|
||||||
os_size_t next_write_idx = fifo_next(self, self->write_idx);
|
os_size_t next_write_idx = fifo_next(self, self->write_idx);
|
||||||
|
|
||||||
if(next_write_idx == self->read_idx){
|
if(next_write_idx == self->read_idx){
|
||||||
|
|
||||||
|
#if defined(OS_CFG_FIFO_DEBUG_ENABLE) && (OS_CFG_FIFO_DEBUG_ENABLE==1)
|
||||||
|
self->overflow_count++;
|
||||||
|
#endif
|
||||||
|
|
||||||
return OS_ERR_FULL;
|
return OS_ERR_FULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
self->buffer[write_idx] = data;
|
self->buffer[write_idx] = data;
|
||||||
self->write_idx = next_write_idx;
|
self->write_idx = next_write_idx;
|
||||||
|
|
||||||
|
#if defined(OS_CFG_FIFO_DEBUG_ENABLE) && (OS_CFG_FIFO_DEBUG_ENABLE==1)
|
||||||
|
os_size_t used = fifo_count(self);
|
||||||
|
if (used > self->high_water) {
|
||||||
|
self->high_water = used;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return OS_ERR_OK;
|
return OS_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,12 @@
|
|||||||
#include <os_macros.h>
|
#include <os_macros.h>
|
||||||
#endif /*INCLUDED_OS_MACROS_H*/
|
#endif /*INCLUDED_OS_MACROS_H*/
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||||
|
/* */
|
||||||
|
|
||||||
|
#ifndef OS_CFG_FIFO_DEBUG_ENABLE
|
||||||
|
#define OS_CFG_FIFO_DEBUG_ENABLE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ==================================================================================================== */
|
/* ==================================================================================================== */
|
||||||
/* 类型 */
|
/* 类型 */
|
||||||
@@ -24,6 +29,11 @@ typedef struct fifo_t{
|
|||||||
os_size_t buffer_size;
|
os_size_t buffer_size;
|
||||||
volatile os_size_t write_idx;
|
volatile os_size_t write_idx;
|
||||||
volatile os_size_t read_idx;
|
volatile os_size_t read_idx;
|
||||||
|
#if defined(OS_CFG_FIFO_DEBUG_ENABLE) && (OS_CFG_FIFO_DEBUG_ENABLE==1)
|
||||||
|
volatile os_size_t high_water; /* 顶峰时期使用的字节数 */
|
||||||
|
volatile os_size_t overflow_count; /* 请求遇到溢出的次数 */
|
||||||
|
#endif
|
||||||
|
|
||||||
}fifo_t;
|
}fifo_t;
|
||||||
|
|
||||||
#define FIFO_INVALID_POS ((os_size_t)(-1u))
|
#define FIFO_INVALID_POS ((os_size_t)(-1u))
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
#cmakedefine OS_CFG_CPU_FPU_PRESENT @OS_CFG_CPU_FPU_PRESENT@
|
#cmakedefine OS_CFG_CPU_FPU_PRESENT @OS_CFG_CPU_FPU_PRESENT@
|
||||||
#cmakedefine OS_CFG_CPU_MPU_PRESENT @OS_CFG_CPU_MPU_PRESENT@
|
#cmakedefine OS_CFG_CPU_MPU_PRESENT @OS_CFG_CPU_MPU_PRESENT@
|
||||||
|
|
||||||
|
#cmakedefine OS_CFG_FIFO_DEBUG_ENABLE @OS_CFG_FIFO_DEBUG_ENABLE@
|
||||||
|
|
||||||
/* ==================================================================================================== */
|
/* ==================================================================================================== */
|
||||||
/* DEFAULT */
|
/* DEFAULT */
|
||||||
@@ -71,5 +71,8 @@
|
|||||||
#define OS_CFG_CPU_MPU_PRESENT 0
|
#define OS_CFG_CPU_MPU_PRESENT 0
|
||||||
#endif /* OS_CFG_CPU_MPU_PRESENT */
|
#endif /* OS_CFG_CPU_MPU_PRESENT */
|
||||||
|
|
||||||
|
#ifndef OS_CFG_FIFO_DEBUG_ENABLE
|
||||||
|
#define OS_CFG_FIFO_DEBUG_ENABLE 0
|
||||||
|
#endif /* OS_CFG_FIFO_DEBUG_ENABLE */
|
||||||
|
|
||||||
#endif /*INCLUDED_OS_CONFIG_H*/
|
#endif /*INCLUDED_OS_CONFIG_H*/
|
||||||
|
|||||||
Reference in New Issue
Block a user