核心接口
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 通知
• 状态更新通知
• 单值控制命令
• 驱动层事件传递