#include "queue.h"
void S_QueueEmpty(unsigned char **Head,unsigned char **Tail,unsigned char *pBuff)
{
*Head = pBuff;
*Tail = pBuff;
} ;
/*
这个函数有三个作用
1.将数据放入队列中
2.如果尾指针指向队尾,就把尾指针挪到队头。(本质上说,这个队列是在同一个区域重复循环使用)
3.如果首尾指针指向同一个位置 ,那么就把首指针往后挪一位。(这个时候其实,首指针指向的数据已经被新写入的数据覆盖了,我们把它抛弃)
4.注意:和尾指针一样,首指针也要做判断,步骤3中如果首指针也移动到了队列尾部,那么也需要重新挪到队首 。
*/
void S_QueueDataIn(unsigned char **Head,unsigned char **Tail,unsigned char *pBuff,unsigned char *DataIn,unsigned char Len)
{
**Tail = *DataIn;
(*Tail) ++;
if( *Tail == pBuff + Len)
{
*Tail = pBuff;
};
if(*Tail == *Head)
{
*Head ++;
if( *Head == pBuff + Len)
{
*Head = pBuff;
};
}
} ;
/*
这个函数有三个作用
1.将数据从队列中取出
2.如果头指针指向队尾,就把头指针挪到队头。(本质上说,这个队列是在同一个区域重复使用)
3.执行成功就返回1,执行失败返回0
*/
unsigned char S_QueueDataOut(unsigned char **Head,unsigned char **Tail,unsigned char *pBuff,unsigned char *DataOut)
{
unsigned char state = 0;
if(*Head != *Tail)
{
*DataOut = **Head;
*Head ++;
state = 1;
if( *Head == pBuff + Len)
{
*Head = pBuff;
};
}
return state;
};