队列,适用于字节流操作

.h文件

队列初始化

void queue_byte_init(STU_BYTE_QUEUE *Queue,uint8_t *pbuf,uint16_t buf_len);
传入参数:
pbuf为指向队列的缓存空间
buf_len输入参数指向缓存空间的大小

使用举例:队列大小是512
uint8_t buf[512];
STU_BYTE_QUEUE TestStuQueue;
queue_dt_init(&TestStuQueue,buf,512);

一个byte入队列

bool queue_byte_in(STU_BYTE_QUEUE *Queue,uint8_t datain);
传入参数:
datain指向入队一个字节
使用举例:
queue_byte_in(&TestStuQueue,0x12);//存入0x12

从队列取出一个字节,从队列中自动删除这个字节数据

bool queue_byte_out(STU_BYTE_QUEUE *Queue,uint8_t *pdata);
传入参数:
pdata指向取出数据
使用举例:
uint8_t dataout;

if(true==queue_dt_out(&TestStuQueue,&dataout))
{

}

#ifndef byte_fifo_h____
#define byte_fifo_h____


#include "stdint.h"
#include "stdbool.h"
#include "string.h"


typedef struct
{
uint16_t in;      
uint16_t out;   
uint16_t max_buf;
uint8_t *buf;
}STU_BYTE_QUEUE;


bool queue_byte_out(STU_BYTE_QUEUE *Queue,uint8_t *pdata);
bool queue_byte_in(STU_BYTE_QUEUE *Queue,uint8_t datain);
bool queue_byte_is_empty(STU_BYTE_QUEUE *Queue);
void queue_byte_init(STU_BYTE_QUEUE *Queue,uint8_t *pbuf,uint16_t buf_len);





#endif




.c文件

#include "byte_fifo.h"





void queue_byte_init(STU_BYTE_QUEUE *Queue,uint8_t *pbuf,uint16_t buf_len)
{
    Queue->in=0;
    Queue->out=0;
    Queue->max_buf=buf_len;
    Queue->buf=pbuf;
}


/*
return : 
true: queue is empty
false: queue have data
*/

bool queue_byte_is_empty(STU_BYTE_QUEUE *Queue)
{
    if(Queue->in==Queue->out)
    return true;
    else
    return false;
}


/*
return : 
true: queue empty
false: queue full
*/

bool queue_byte_in(STU_BYTE_QUEUE *Queue,uint8_t datain)
{   

    bool ret=true;


    if(((Queue->in+1)%Queue->max_buf)==Queue->out)//queue is full
    {
    ret=false;
    }

    Queue->buf[Queue->in] = datain;
    Queue->in++;
    Queue->in%=Queue->max_buf;
    return ret;


}

/*
para:   pdata--------->point out data

return : 
true:have data in queue
false:no data in queue
*/

bool queue_byte_out(STU_BYTE_QUEUE *Queue,uint8_t *pdata)
{
 
    if(Queue->in == Queue->out) 
    {
        return false;
    }
    else
    {
        *pdata = Queue->buf[Queue->out];
        Queue->out++;
        Queue->out%=Queue->max_buf;
      
        return true;
    }
}




你可能感兴趣的:(队列,适用于字节流操作)