.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;
}
}
网友评论