美文网首页
队列,适用于字节流操作

队列,适用于字节流操作

作者: 嵌入式工作 | 来源:发表于2018-05-10 12:04 被阅读0次

    .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;
        }
    }
    
    
    
    
    

    相关文章

      网友评论

          本文标题:队列,适用于字节流操作

          本文链接:https://www.haomeiwen.com/subject/jhszrftx.html