os_mailbox_send

所属模块:通信机制 | 类型:邮箱发送函数

API Metadata

函数ID:os_mailbox_send
模块:mailbox
类型:mailbox send
嵌套深度:2

函数简介

os_mailbox_send 用于向邮箱写入数据,并根据等待状态唤醒接收任务。

当存在等待任务时,将优先唤醒一个任务;否则仅更新邮箱数据。

函数原型

char os_mailbox_send(u8 mid, u8 content);

参数说明

参数 说明
mid 邮箱ID(0 ~ OS_RESOURCE_MAX-1)
content 发送的数据(1字节)

返回值

1 - 发送成功
-1 - 参数错误

源码实现

#include "hrtos_internal.h" /* * 邮箱发送(Send) * 语义: * 1. 写入数据 * 2. 如果有等待任务 → 唤醒 * 3. 否则仅保存数据 */ char os_mailbox_send(u8 mid, u8 content) { OS_RESOURCE *m; u8 next; u8 i; if (mid >= OS_RESOURCE_MAX) { return -1; } EA = 0; m = &OS_RES[mid]; m->value = content; next = OS_INVALID_ID; /* ------------------------- * 唤醒等待任务(若存在) * ------------------------- */ if(m->wait_mask) { for(i = 0; i < OS_MAX_TASK; i++) { if(m->wait_mask & ((u16)1 << i)) { next = i; break; } } if(next != OS_INVALID_ID) { wake_task(next, WAIT_SIGNAL); } EA = 1; return 1; } EA = 1; return 1; }

使用示例

void sender_task() { os_mailbox_send(0, 0x55); }

注意事项

该函数为非阻塞发送接口,仅唤醒一个等待任务。 若无等待任务,数据将保留在邮箱中。

相关推荐