os_mb.h 源码
2026/7/20大约 1 分钟源码参考内核邮箱头文件
os_mb.h — 邮箱接口头文件
源文件路径: kernel/include/os_mb.h
引用章节: 4.3.5 邮箱
完整源码
#ifndef __OS_MB_H__
#define __OS_MB_H__
#include <oneos_config.h>
#include <os_types.h>
#include <os_list.h>
#include <os_spinlock.h>
#include <os_dummy.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef OS_USING_MAILBOX
#define OS_MB_WAKE_TYPE_PRIO 0x55
#define OS_MB_WAKE_TYPE_FIFO 0xAA
typedef struct dummy_mailbox os_mailbox_dummy_t;
typedef os_mailbox_dummy_t *os_mailbox_id;
#define OS_MAILBOX_DEFINE(name) os_mailbox_dummy_t name
/* 邮箱池定义宏 */
#define OS_MAILBOX_POOL_DEFINE(name, mail_count) os_ubase_t pool_##name[mail_count]
#define OS_MAILBOX_POOL_ADDR(name) ((void *)pool_##name)
#define OS_MAILBOX_POOL_SIZE(name) sizeof(pool_##name)
#ifdef OS_USING_HEAP
extern os_mailbox_id os_mailbox_create_dynamic(const char *name, os_size_t max_mails);
#endif
extern os_mailbox_id
os_mailbox_create_static(os_mailbox_dummy_t *mailbox_cb, const char *name,
void *mail_pool, os_size_t mail_pool_size);
extern os_err_t os_mailbox_destroy(os_mailbox_id mailbox_id);
extern os_err_t os_mailbox_send(os_mailbox_id mailbox_id, os_ubase_t value, os_tick_t timeout);
extern os_err_t os_mailbox_recv(os_mailbox_id mailbox_id, os_ubase_t *value, os_tick_t timeout);
extern os_err_t os_mailbox_set_wake_type(os_mailbox_id mailbox_id, uint8_t wake_type);
extern os_err_t os_mailbox_reset(os_mailbox_id mailbox_id);
extern os_err_t os_mailbox_is_empty(os_mailbox_id mailbox_id, os_bool_t *empty_flag);
extern os_err_t os_mailbox_is_full(os_mailbox_id mailbox_id, os_bool_t *full_flag);
extern os_err_t os_mailbox_get_capacity(os_mailbox_id mailbox_id, uint16_t *capacity);
extern os_err_t os_mailbox_get_used_mails(os_mailbox_id mailbox_id, uint16_t *used);
extern os_err_t os_mailbox_get_unused_mails(os_mailbox_id mailbox_id, uint16_t *unused);
#endif /* OS_USING_MAILBOX */
#ifdef __cplusplus
}
#endif
#endif /* __OS_MB_H__ */关键说明
| API | 功能 | 说明 |
|---|---|---|
os_mailbox_send | 发送邮件 | 传递 os_ubase_t 值(指针或整数),满时阻塞等待 |
os_mailbox_recv | 接收邮件 | 获取邮件值,空时阻塞等待 |
| 与消息队列区别 | 传递单值 | 邮箱传递 os_ubase_t(4/8字节),消息队列传递可变长数据 |