[嵌入式开发模块]环形缓冲区 循环队列 C语言实现_c语言环型队列

*********************************************************************************************************
*/
#define RQ_ERR_NONE 0u

#define RQ_ERR_POINTER_NULL 1u
#define RQ_ERR_SIZE_ZERO 2u

#define RQ_ERR_BUFFER_FULL 3u
#define RQ_ERR_BUFFER_EMPTY 4u

#define RQ_OPTION_WHEN_FULL_DISCARD_FIRST 0u // discard the first element when ring buffer is full
#define RQ_OPTION_WHEN_FULL_DONT_IN 1u // discard new element when ring buffer is full
/*
*********************************************************************************************************
* DATA TYPE 数据类型
*********************************************************************************************************
*/

// define the data type that stores in the RingQueue. 定义存在环形缓冲区内的数据的类型
typedef unsigned char RQTYPE;
typedef RQTYPE *RQ_ADDRESSING_MODE pRQTYPE;
typedef struct {
unsigned short RingBufCtr; /* Number of characters in the ring buffer */
unsigned short RingBufSize; /* Ring buffer Size */
pRQTYPE RingBufInPtr; /* Pointer to where next character will be inserted */
pRQTYPE RingBufOutPtr; /* Pointer from where next character will be extracted */
pRQTYPE RingBuf; /* Ring buffer array */
pRQTYPE RingBufEnd; /* Point to the end of the buffer */
} RING_QUEUE;

/*
*********************************************************************************************************
* FUNCTION PROTOTYPES 函数原型
*********************************************************************************************************
*/

RING_QUEUE *RingQueueInit(RING_QUEUE *pQueue,pRQTYPE pbuf,unsigned short bufSize,unsigned char *perr);
#pragma CODE_SEG __NEAR_SEG NON_BANKED
unsigned short RingQueueIn(RING_QUEUE *pQueue,RQTYPE data,unsigned char option,unsigned char *perr);
RQTYPE RingQueueOut(RING_QUEUE *pQueue,unsigned char *perr);
#pragma CODE_SEG DEFAULT
short RingQueueMatch(RING_QUEUE *pQueue,pRQTYPE pbuf,unsigned short len);
void RingQueueClear(RING_QUEUE *pQueue);

/*
*********************************************************************************************************
* RingQueueIsEmpty()
*
* Description : whether the RingQueue is empty. 环形队列是否为空
*
* Arguments : pQueue pointer to the ring queue control block; 指向环形队列控制块的指针
*
* Return : TRUE the RingQueue is empty.
* FALSE the RingQueue is not empty.
* Note(s) :
*********************************************************************************************************
*/

#define RingQueueIsEmpty(pQueue) ((pQueue)->RingBufCtr == 0)

/*
*********************************************************************************************************
* RingQueueIsFull()
*
* Descript

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值