/********************************************************************* File Name : LoopQueue.c Description : 循环队列 此循环队列元素为 unsigned char类型。 *********************************************************************/ #include "LoopQueue.h" #include "string.h" /********************************************************************* *UCQueueInit 初始化UCQueue队列 **********************************************************************/ void UCQueueInit(UCQueue *queue,unsigned char *pBuf, unsigned short BufLen) { queue->buf=pBuf; queue->size=BufLen; queue->in=0; queue->out=0; } /********************************************************************* *UCQueueOut 出队列 返回-1标识队列已空,返回0~255为出队列元素值 **********************************************************************/ int UCQueueOut(UCQueue *queue) { unsigned char data; if(queue->in==queue->out)return -1; data=queue->buf[queue->out]; if(++queue->out>=queue->size)queue->out=0; return (int)data; } /********************************************************************* *UCQueueIn 入队列 返回-1标识队列已满,返回0入成功 **********************************************************************/ int UCQueueIn(UCQueue *queue,unsigned char data) { unsigned short out=queue->out; unsigned short in=queue->in; if(++in>=queue->size)in=0; if(in==out)return -1; queue->buf[queue->in]=data; queue->in=in; return 0; } /********************************************************************* *USQueueInit 初始化USQueue队列 **********************************************************************/ void USQueueInit(USQueue *queue,unsigned short *pBuf, unsigned short BufLen) { queue->buf=pBuf; queue->size=BufLen; queue->in=0; queue->out=0; } /********************************************************************* *USQueueOut 出队列 返回-1标识队列已空,返回0~65535为出队列元素值 **********************************************************************/ int USQueueOut(USQueue *queue) { unsigned short data; if(queue->in==queue->out)return -1; data=queue->buf[queue->out]; if(++queue->out>=queue->size)queue->out=0; return (int)data; } /********************************************************************* *USQueueIn 入队列 返回-1标识队列已满,返回0入成功 **********************************************************************/ int USQueueIn(USQueue *queue,unsigned short data) { unsigned short out=queue->out; unsigned short in=queue->in; if(++in>=queue->size)in=0; if(in==out)return -1; queue->buf[queue->in]=data; queue->in=in; return 0; } /********************************FILE END*****************************/