#include "queue.h" #include "stm32f4xx.h" /// front ... rear 数据方向 -> /* 队列的顺序存储结构(循环队列) */ /**************************************************** * 函 数 名:InitQueue * 函数功能:初始化队列 * 入口参数:无 * 说 明: ****************************************************/ void InitQueue(SqQueue *Q) { /* 构造一个空队列Q */ Q->front = Q->rear = 0; /*空队列*/ } /**************************************************** * 函 数 名:IsQueueEmpty * 函数功能:查询队列是否为空 * 入口参数:Q 队列 * 说 明:空队列,返回TRUE;否则返回FALSE ****************************************************/ u8 IsQueueEmpty(const SqQueue *Q) { /* 若*/ if (Q->front == Q->rear) return TRUE; else return FALSE; } /**************************************************** * 函 数 名:QueueLength * 函数功能:初始化长度 * 入口参数:Q 队列 * 说 明: ****************************************************/ int QueueLength(SqQueue Q) { /* 返回Q的元素个数,即队列的长度 */ return (Q.rear - Q.front + MAX_QSIZE) % MAX_QSIZE; } /**************************************************** * 函 数 名:GetHead * 函数功能:获取对头数据 * 入口参数:Q 队列 * 说 明: ****************************************************/ u8 GetHead(SqQueue *Q, CanData_TypeDef *e) { /* 若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR */ if (Q->front == Q->rear) /* 队列空 */ return ERROR; *e = Q->CanBuf[Q->front]; Q->front = (Q->front + 1) % MAX_QSIZE; return SUCCESS; } /**************************************************** * 函 数 名:InsertQueue * 函数功能:队列插入数据 * 入口参数:Q 待插入队列 e 待插入数据 * 说 明: ****************************************************/ u8 InsertQueue(SqQueue *Q, CanData_TypeDef e) { /* 插入元素e为Q的新的队尾元素 */ if ((Q->rear + 1) % MAX_QSIZE == Q->front) /* 队列满 */ return ERROR; Q->CanBuf[Q->rear] = e; Q->rear = (Q->rear + 1) % MAX_QSIZE; return SUCCESS; } // u8 DeQueue(SqQueue *Q, Can1Buf_TypeDef *e) //{ /* 若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR */ // if(Q->front==Q->rear) /* 队列空 */ // return ERROR; // *e=Q->base[Q->front]; // Q->front=(Q->front+1)%MAX_QSIZE; // return OK; // }