嵌入式消息队列组件

本文最后更新于:17 天前

消息队列组件

需求分析

消息队列组件目标是实现消息队列结构,结合IPC组件实现模块间的异步通信。消息队列实现

模块设计

设计目标

  • 功能目标
    • 正确性
  • 性能目标
    • 易用性
    • 可拓展性
    • 稳定性

设计原理

消息队列采用fifo的队列数据结构,fifo指的是“first in,first out”,先进先出,消费的顺序与生产的顺序一致。
消息队列
设计中的关键点:

  1. 消息体可以是任意结构,所以消息的存取都采用指针的方式只传递地址
  2. 写失败的唯一原因是,消息的实际大小个数已经等于最大个数,此时消息队列内已无多余的空间用于存储新的消息体
  3. 读失败的唯一原因是,实际的消息数量为0
  4. 消息内部创建的时候不提供消息的存储空间,需要在创建时将静态内存或者动态内存好的内存当作参数传递给消息队列类型对象

对外接口

  • 创建消息队列对象
    1
    2
    3
    4
    5
    6
    7
    /**
    * @brief 创建消息队列
    * @param queue 消息队列对象
    * @param msgNum 消息数量
    * @param data 数据指针
    */
    void Queue_creat(Queue *queue, uint8_t msgNum, uint8_t msgSize, void *data);
  • 消息推送
    1
    2
    3
    4
    5
    6
    7
    /**
    * @brief 推送消息到消息队列中
    * @param queue 消息队列对象
    * @param msg 待推送的消息
    * @return 推送成功或者失败
    */
    uint8_t Queue_push(Queue *queue, void *msg);
  • 消息取出
    1
    2
    3
    4
    5
    6
    7
    /**
    * @brief 从消息队列中取出消息
    * @param queue 消息队列对象
    * @param msg 待取出的消息
    * @return 取出成功或者失败
    */
    uint8_t Queue_pull(Queue *queue, void *msg);
    消息队列收发流程

最佳实践

github仓库


嵌入式消息队列组件
https://hudaxia.top/2021/09/17/组件-消息队列实现/
作者
胡大侠
发布于
2021年9月17日
更新于
2023年3月10日
许可协议