源码文件:queue.c
/*****************************************************************************
函 数 名 : initQueue
功能描述 : 初始化队列里元素
输入参数 : queue:指向队列首地址
返 回 值 :
修改历史 :
日 期 : 2021
作 者 : uncle
修改内容 : 新生成函数
注:
*****************************************************************************/
int initQueue(struct queueEvt* queue)
{
if(! queue)
{
return -1;
}
memset(queue,0,sizeof(struct queueEvt));
}
/*****************************************************************************
函 数 名 : queueIsFull
功能描述 : 判断是否满
输入参数 : queue:指向队列首地址
返 回 值 :
修改历史 :
日 期 : 2021
作 者 : uncle
修改内容 : 新生成函数
注:
*****************************************************************************/
static inline int queueIsFull(struct queueEvt* queue)
{
return (queue->isfull);
}
/*****************************************************************************
函 数 名 : queueIsFull
功能描述 : 判断是否满
输入参数 : queue:指向队列首地址
返 回 值 :
修改历史 :
日 期 : 2021
作 者 : uncle
修改内容 : 新生成函数
注:
*****************************************************************************/
static inline int queueIsEmpty(struct queueEvt* queue)
{
return ((queue->wptr == queue->rptr) && (queue->isfull == 0))
}
/*****************************************************************************
函 数 名 : queuePush
功能描述 : 队列压栈
输入参数 : queue:指向队列首地址
:Element:入栈元素
返 回 值 :
修改历史 :
日 期 : 2021
作 者 : uncle
修改内容 : 新生成函数
注:
*****************************************************************************/
int queuePush(struct queueEvt* queue,QueueElement_t* Element)
{
if(queueIsFull(queue))
{
return 0;
}
ENTRY_LOCK();
queue->data[queue->wptr] = *Element;
queue->wptr += 1;
queue->wptr %= QUEUE_MAX_BUFF;
if(queue->wptr == queue->rptr)
{
queue->isfull = 1;
}
EXIT_LOCK();
return 1;
}
/*****************************************************************************
函 数 名 : queuePop
功能描述 : 判断是否满
输入参数 : queue:指向队列首地址
: Elementt 出栈队列的元素
返 回 值 :
修改历史 :
日 期 : 2021
作 者 : uncle
修改内容 : 新生成函数
注:
*****************************************************************************/
int queuePop(struct queueEvt* queue,QueueElement_t* Element)
{
if(queueIsEmpty(queue))
{
return 0;
}
ENTRY_LOCK();
*Element = queue->data[queue->rptr];
queue->rptr += 1;
queue->rptr %= QUEUE_MAX_BUFF;
queue->isfull = 0;
EXIT_LOCK();
return 1;
}
头文件:
#ifndef __QUEUE_H_
#define __QUEUE_H_
#define QueueElement_t (unsigned char)
#define QUEUE_MAX_BUFF (1024)
#define ENTRY_LOCK() ()
#define EXIT_LOCK() ()
struct
{
unsigned int wptr;
unsigned int rptr;
unsigned int isfull;
QueueElement_t* data;
}queueEvt;
#endif //__QUEUE_H_
|