消息队列(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 参考
与Mailbox对比
Mailbox
单消息缓存,适合轻量事件通知。
Message Queue
多消息缓存,支持FIFO顺序处理。
核心区别
Queue = 可扩展缓冲结构 | Mailbox = 单槽通信
系统意义
消息队列适合处理多事件、高吞吐异步通信场景, 能够提升系统解耦能力与任务间通信可靠性。