int fFifoPush(CFifo *myfifo, UCHAR c){
UINT tmp_len;
if(myfifo->fullflag != FULL){
tmp_len = myfifo->m_wp;
myfifo->m_buf[tmp_len] = c;
tmp_len++;
if (tmp_len >= myfifo->m_bufsize) tmp_len = 0;
if (tmp_len == myfifo->m_rp) {
myfifo-> fullflag = FULL;
}
myfifo->m_wp = tmp_len;
myfifo-> emptyflag = !EMPTY;
return TRUE;
}
else return ERROR_FULL_W ;
}
3.从队列中读出数据
int fFifoPop(CFifo *myfifo, int *data){
UINT tmp_len;
UCHAR tmp_char;
if(myfifo->emptyflag != EMPTY){
tmp_len = myfifo->m_rp;
tmp_char = myfifo->m_buf[tmp_len];
*data = tmp_char;
tmp_len++;
if (tmp_len >= myfifo->m_bufsize) tmp_len = 0;
myfifo->m_rp = tmp_len;
if (tmp_len == myfifo->m_wp) {
myfifo->emptyflag = EMPTY;
}
myfifo-> fullflag = !FULL;
return TRUE;
}
else return ERROR_EMPTY_R;
}
4.计算队列中数据长度
UINT fFifoCheckLen(CFifo *myfifo){
if(myfifo->emptyflag == EMPTY) return 0;
else if(myfifo->fullflag == FULL) return myfifo->m_bufsize;
if(myfifo->m_wp >= myfifo->m_rp ){
return myfifo->m_wp - myfifo->m_rp ;
}
else{
return myfifo->m_bufsize - myfifo->m_rp + myfifo->m_wp;
}
}