46 lines
1.0 KiB
C
46 lines
1.0 KiB
C
/*
|
||
* ring_queue.h
|
||
*
|
||
* Created on: 2024年6月21日
|
||
* Author: psx
|
||
*/
|
||
|
||
#ifndef DRIVERS_RINGQUEUE_RING_QUEUE2_H_
|
||
#define DRIVERS_RINGQUEUE_RING_QUEUE2_H_
|
||
|
||
|
||
//#define RING_QUEUE_DEBUG //定义本宏会打印RingQueue的调试信息
|
||
|
||
//typedef unsigned char RQ_ElementType2;//元素类型
|
||
typedef uint16_t RQ_ElementType2;//元素类型
|
||
|
||
|
||
typedef struct _ring_queue2
|
||
{
|
||
RQ_ElementType2 *elems;
|
||
int size;
|
||
volatile int front, rear;
|
||
}RingQueue2;
|
||
|
||
//初始化队列,需传入保存队列状态的结构q,队列使用的buffer和buffer大小
|
||
int InitRingQueue2(RingQueue2 *q, RQ_ElementType2 *buff, int size);
|
||
|
||
#define RingQueueFull2(q) (((q)->rear+1) % (q)->size == (q)->front)
|
||
#define RingQueueEmpty2(q) ((q)->front == (q)->rear)
|
||
|
||
//遍历队列,
|
||
//消费者使用,故对生产者可能修改的rear先读取缓存
|
||
int ShowRingQueue2(RingQueue2 *q);
|
||
|
||
//向队尾插入元素e
|
||
int InRingQueue2(RingQueue2 *q,RQ_ElementType2 e);
|
||
|
||
//从队首删除元素
|
||
int OutRingQueue2(RingQueue2 *q, RQ_ElementType2 *e);
|
||
|
||
//队列中的元素个数
|
||
int RingQueueLength2(RingQueue2 *q);
|
||
|
||
|
||
#endif /* DRIVERS_RINGQUEUE_RING_QUEUE_H_ */
|