Communication Model

消息队列(Message Queue)

消息队列用于缓存多个消息对象,实现任务间顺序化数据传输。 相比邮箱,消息队列支持批量缓存与先进先出处理模型。

机制定义

Message Queue = 消息入队 + 队列缓存 + 消息出队 + FIFO顺序处理

Message Queue 是 HRTOS Communication Model 中的核心通信机制之一,用于提供可靠的多消息缓存与顺序处理能力。

所属通信模型

Communication Model

返回通信模型总览

Mailbox vs Message Queue

Mailbox:单消息轻量传递 | Queue:多消息缓存与FIFO处理

触发条件

消息队列通常用于以下场景:

多任务发送数据

多个任务向队列写入消息。

接收任务排队处理

按消息顺序逐个处理。

突发数据缓存

短时间内缓存大量事件消息。

异步任务解耦

发送与接收任务执行解耦。

执行流程

1. 初始化消息队列

创建队列缓冲区。

2. 发送任务入队

消息写入队列尾部。

3. 队列缓存消息

系统维护FIFO顺序。

4. 接收任务出队

读取队首消息。

5. 完成消息处理

执行对应业务逻辑。

演示代码


#include <HRTOS.H>
#include <HRTOS_KERNEL.H>

void producer(void)
{
    while(1)
    {
        os_news_send1(0, 0x11);
        os_wait1(5);
    }
}

void consumer(void)
{
    while(1)
    {
        os_wait1(5);
    }
}

void main(void)
{
    os_mail_init();

    os_task((unsigned int)producer, 0, 3, 0);
    os_task((unsigned int)consumer, 1, 2, 0);

    os_task_release(0);

    while(1)
    {
        os_nop();
    }
}
    

API 参考

队列初始化

os_msg_init()

发送消息

os_msg_send()

接收消息

os_msg_recv()

与Mailbox对比

Mailbox

单消息缓存,适合轻量事件通知。

Message Queue

多消息缓存,支持FIFO顺序处理。

核心区别

Queue = 可扩展缓冲结构 | Mailbox = 单槽通信

系统意义

消息队列适合处理多事件、高吞吐异步通信场景, 能够提升系统解耦能力与任务间通信可靠性。

相关导航

通信模型

Communication Model

调度系统

Scheduling Engine

中断机制

Interrupt Flow

任务生命周期

Task Lifecycle