美文网首页
模拟消息队列

模拟消息队列

作者: 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

相关文章

  • 模拟消息队列

    使用模拟消息队列可减少掉帧 头文件声明队列的结构体

  • 多线程模拟实现发布-订阅(一)

    我们是模拟两个生产者,各自都往消息队列里推送消息,共计100条 再次模拟两个消费者,各自都开始消费消息 生产者1 ...

  • HDUOJ-1026 Ignatius and the Prin

    解题思路 广搜 使用队列来模拟广搜 数组模拟队列 使用1维数组来模拟队列,head为当前队列头,tail-1为当前...

  • 消息机制与模拟消息

    消息机制与模拟消息 消息机制 硬件产生事件 被操作系统捕获,封装成消息 操作系统发送到系统消息队列 再由操作系统由...

  • 数据结构之队列

    什么是队列 队列是一个有序列表, 可以用数组或链表实现 先入先出 使用数组模拟队列和环形队列 用数组模拟队列 思路...

  • 消息队列:消息队列简介

    1. 什么是消息队列 消息队列(message queue),是一种应用程序的通信方法; 消息队列是 生产者-消费...

  • 消息中间件

    消息中间件,也可以叫做中央消息队列或者是消息队列(区别于本地消息队列,本地消息队列指的是 JVM 内实现的队列实现...

  • 消息队列对比

    引用: 常用消息队列对比消息队列及常见消息队列介绍 常用消息队列 1. RabbitMQ 用erlang语言开发的...

  • 消息队列应用-使用异步队列就解耦了吗

    消息队列作用一文介绍了为什么要使用消息队列。我们再来讨论下如何有效使用消息队列。 消息队列模式 目前主流消息队列主...

  • Kafka常见问题解决

    概要:我们使用消息队列,就需要知道为什么要用消息队列,什么场景需要用消息队列,使用消息队列能带来哪些好处和消息队列...

网友评论

      本文标题:模拟消息队列

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