os_mailbox_receive

所属模块:通信机制 | 类型:邮箱阻塞接收函数

API Metadata

函数ID:os_mailbox_receive
模块:mailbox
类型:mailbox receive
嵌套深度:2

函数简介

os_mailbox_receive 用于从邮箱中接收数据, 支持“快速路径返回 + 阻塞等待”两种执行模式。

当邮箱有数据时立即返回;当邮箱为空时, 任务进入 WAIT_MAILBOX 状态,由调度器唤醒。

函数原型

int os_mailbox_receive(u8 mid);

参数说明

参数 说明
mid 邮箱ID(0 ~ OS_RESOURCE_MAX-1)

返回值

≥0 - 成功接收数据
-1 - 参数错误

源码实现

#include "hrtos_internal.h" /* * 邮箱接收(Receive) * 语义: * 1. 有数据 -> 直接取走 * 2. 无数据 -> 进入 WAIT_MAILBOX */ int os_mailbox_receive(u8 mid) { OS_RESOURCE *m; u8 tid; int _data; if (mid >= OS_RESOURCE_MAX) { return -1; } EA = 0; m = &OS_RES[mid]; tid = OS_CURRENT_TASK; /* ------------------------- * 快路径:无数据 → 进入等待 * ------------------------- */ if(m->value == 0) { EA = 1; os_wait(WAIT_MAILBOX, mid, 0); } /* ------------------------- * 快路径:有数据直接读取 * ------------------------- */ if(m->value != 0) { _data = m->value; m->value = 0; EA = 1; return _data; } EA = 1; /* ------------------------- * 慢路径:被唤醒后读取 * ------------------------- */ return m->value; }

使用示例

void task() { int data = os_mailbox_receive(0); if(data >= 0) { // 处理接收数据 } }

注意事项

该函数在无数据时会进入阻塞状态,由调度器统一唤醒。 属于典型“快路径 + 慢路径”混合设计。

相关推荐