美文网首页
模拟消息队列

模拟消息队列

作者: Vieta_Qiu人工智障 | 来源:发表于2018-10-30 10:01 被阅读0次

    使用模拟消息队列可减少掉帧

    /**************************************************************************
    * @brief: 模拟消息队列
    * @author: Vieta
    * @copyright: 版权信息
    * @version: 版本
    * @note: 注意事项
    * @history: 历史记录
    ***************************************************************************/
    #include "stm32f4xx.h"
    #include "queue.h"
    
    static Queue buf;//声明一个消息队列,初始状态,head和tail都为0;
    
    /**************************************************************************
    * @brief     : 把一个字节的数据加入到消息队列
    * @param[in] : ch:待加入的数据
    * @return    : true:数据入队成功 false:队列已满,入队失败 
    ***************************************************************************/
    bool put(u8 ch)
    {
        if (buf._tail+1 == buf._head)//如果在数组里,队列的尾部已经追到头部,说明队列已经满了,返回false,表示不能入队
        return false;
    
        buf._buffer[buf._tail++] = ch;//把数据追加到队列尾部后,尾部的下标自加一,队列边长,尾部向数组后面移动
    
        if (buf._tail >= MAX_SIZE)//尾部下标大于队列最大范围,就归零,那下一个加入的数据就加入到buf数组的前面
            buf._tail = 0;
    
        return true;
    }
    
    /**************************************************************************
    * @brief     : 从队列中取出一个数据
    * @param[in] : ch:待取出的数据
    * @return    : true:取出成功 false:队列为空
    ***************************************************************************/
    
    bool get(u8 *ch)
    {
        if (buf._head == buf._tail)//如果在数组里,队列的尾部就是头部,说明队列为空,返回false,无法取得数据
            return false;
    
        *ch = buf._buffer[buf._head++];//把数据赋值给ch后,头部下标自加
    
        if (buf._head >= MAX_SIZE)
            buf._head = 0;
    
        return true;
    }
    
    

    头文件声明队列的结构体

    #ifndef __QUEUE_H
    #define __QUEUE_H
    
    #include "stm32f4xx.h"
    #define MAX_SIZE  256
    
    typedef struct
    {
        unsigned short _head;
        unsigned short _tail;
        unsigned char _buffer[MAX_SIZE];
    }Queue;
    
    bool put(u8 ch);
    bool get(u8 *ch);
    
    #endif
    
    

    相关文章

      网友评论

          本文标题:模拟消息队列

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