可以移植在任意单片机或Linux中,挺好~~
- #include "CirQueue.h"
- CirQueue stQueue;
- /* $Function : Init_Queue
- == ===============================================================
- == Description :
- == Argument : *Q
- == :
- == Return : none
- == Modification : 2014-03-05 xu_chenhua Create
- == ===============================================================
- */
- void InitQueue(CirQueue *Q)
- {
- u8 i;
- Q->front = Q->rear = 0;
- Q->count = 0;
- memset(Q->receive,0,QueueSize);
-
- }
- /* $Function : QueueEmpty
- == ===============================================================
- == Description :
- == Argument : *Q
- == :
- == Return : if count =0 is return 1,if not return 0
- == Modification : 2014-03-05 xu_chenhua Create
- == ===============================================================
- */
- u16 QueueEmpty(CirQueue *Q)
- {
- return Q->count == 0;
- }
- /* $Function : QueueFull
- == ===============================================================
- == Description :
- == Argument : *Q
- == :
- == Return : if count = Queuesize is return 1,if not return 0
- == Modification : 2014-03-05 xu_chenhua Create
- == ===============================================================
- */
- u16 QueueFull(CirQueue *Q)
- {
- return Q->count == QueueSize;
- }
- /* $Function : QueuePushIn
- == ===============================================================
- == Description :
- == Argument : *Q,x
- == :
- == Return : if queue is full return 0 ,if not return 1
- == Modification : 2014-03-05 xu_chenhua Create
- == ===============================================================
- */
- u8 EnQueue(CirQueue *Q,u8 x)
- {
- if(QueueFull(Q))
- {
- return 0;
- }
- Q->count++;
- Q->receive[Q->rear] = x;
- Q->rear = (Q->rear+1)%QueueSize;
- return 1;
- }
- /* $Function : QueuePushIn
- == ===============================================================
- == Description :
- == Argument : *Q ,*dat
- == :
- == Return : if queue is empty return 0 ,if not return 1
- == Modification : 2014-03-05 xu_chenhua Create
- == ===============================================================
- */
- u8 DeQueue(CirQueue *Q, u8 *dat)
- {
- if(QueueEmpty(Q))
- {
- return 0;
- }
- *dat = Q->receive[Q->front];
- Q->front = (Q->front +1)%QueueSize;
- Q->count--;
- return 1;
- }
- /* $Function : QueuePushIn
- == ===============================================================
- == Description :
- == Argument : *rxdata,length
- == :
- == Return : none
- == Modification : 2014-03-05 xu_chenhua Create
- == ===============================================================
- */
- u8 QueuePushIn(u8 *rxdata,u8 length)
- {
- u8 i;
- if(QueueFull(&stQueue))
- {
- return 0;
- }
-
- for(i=0;i<length;i++)
- {
- EnQueue(&stQueue,*rxdata++);
- }
- return 1;
- }
- /* $Function : QueuePopOut
- == ===============================================================
- == Description :
- == Argument : *buf,length
- == :
- == Return : none
- == Modification : 2014-03-05 xu_chenhua Create
- == ===============================================================
- */
- u8 QueuePopOut(u8 *buf, u16 length)
- {
- u8 i;
- if(QueueEmpty(&stQueue))
- {
- return 0;
- }
- for(i=0;i<length;i++)
- {
- DeQueue(&stQueue, &buf[i]);
- }
- return 1;
- }
复制代码
头文件:
- #ifndef __CIRQUEUE_H_
- #define __CIRQUEUE_H_
- #include "usr_define.h"
- #include <string.h>
- #include <stdlib.h>
- #define QueueSize 64
- typedef struct _TagCirQueue
- {
- u16 front;
- u16 rear;
- u16 count;
- u8 receive[QueueSize];
- }CirQueue;
- extern CirQueue stQueue;
- u8 QueuePopOut(u8 * buf,u16 length);
- u8 QueuePushIn(u8 * rxdata,u8 length);
- void InitQueue(CirQueue * Q);
- #endif
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
学习一下,感谢楼主!
一周热门 更多>