fifo 支持水位监测和溢出次数统计
This commit is contained in:
+12
-2
@@ -9,18 +9,28 @@
|
||||
|
||||
// 在尾部写入数据
|
||||
os_err_t fifo_put(fifo_t* self, uint8_t data){
|
||||
|
||||
os_size_t write_idx = self->write_idx;
|
||||
|
||||
os_size_t next_write_idx = fifo_next(self, self->write_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;
|
||||
}
|
||||
|
||||
self->buffer[write_idx] = data;
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,12 @@
|
||||
#include <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;
|
||||
volatile os_size_t write_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;
|
||||
|
||||
#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_MPU_PRESENT @OS_CFG_CPU_MPU_PRESENT@
|
||||
|
||||
|
||||
#cmakedefine OS_CFG_FIFO_DEBUG_ENABLE @OS_CFG_FIFO_DEBUG_ENABLE@
|
||||
|
||||
/* ==================================================================================================== */
|
||||
/* DEFAULT */
|
||||
@@ -71,5 +71,8 @@
|
||||
#define OS_CFG_CPU_MPU_PRESENT 0
|
||||
#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*/
|
||||
|
||||
Reference in New Issue
Block a user