邮箱机制(Mailbox)

基于 OS_RES 资源单元的轻量级通信机制,用于任务间小数据传递与状态通知。 核心语义:写入 value + 唤醒等待任务。

状态传递 轻量IPC 任务同步

定义

Mailbox 本质是 OS_RES 的 value 字段通信封装,不是队列结构,而是“单值消息槽”模型。

核心接口

os_mailbox_init() os_mailbox_clear() os_mailbox_query() os_mailbox_send() os_mailbox_receive()

数据模型

OS_RESOURCE { value // 邮箱内容 owner // 未使用 wait_mask // 等待任务位图 wait_cnt // 等待计数 }
Mailbox = 单值资源 + 等待队列,不是FIFO队列结构。

发送流程(os_mailbox_send)

进入临界区 → 写入 value → 检查 wait_mask → 唤醒任务 → 退出临界区

EA = 0 m->value = content if(wait_mask != 0) wake_task(first_task) EA = 1

接收流程(os_mailbox_receive)

先检查 value:

if(value != 0) 直接读取 else 进入 WAIT_MAILBOX

唤醒后再次读取 value 并清空。

Mailbox 是“读一次清空”的单次消息语义。

关键特性

• 单槽结构(非队列)
• value = 当前消息
• 写入覆盖旧值
• 支持阻塞等待
• wake_task 唤醒机制
• EA 临界区保护

行为语义

Send -> 写 value + 唤醒等待任务 Receive-> 读 value + 清空 Query -> 读取 value(不修改) Clear -> value = 0

典型用途

• ISR → Task 通知
• 状态更新通知
• 单值控制命令
• 驱动层事件传递