单片机队列QUEUE

源码文件: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_

你可能感兴趣的:(c++,c语言)