os_mq.h 源码
2026/7/20大约 1 分钟源码参考内核消息队列头文件
os_mq.h — 消息队列接口头文件
源文件路径: kernel/include/os_mq.h
引用章节: 4.3.4 消息队列
完整源码
#ifndef __OS_MQ_H__
#define __OS_MQ_H__
#include <oneos_config.h>
#include <os_types.h>
#include <os_list.h>
#include <os_dummy.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef OS_USING_MESSAGEQUEUE
#define OS_MQ_WAKE_TYPE_PRIO 0x55
#define OS_MQ_WAKE_TYPE_FIFO 0xAA
typedef struct dummy_msgqueue os_msgqueue_dummy_t;
typedef os_msgqueue_dummy_t *os_msgqueue_id;
#define OS_MSGQUEUE_DEFINE(name) os_msgqueue_dummy_t name
/* 计算消息池大小 */
#define OS_MSGQUEUE_CALC_POOL_SIZE(msg_count, msg_size) \
(sizeof(dummy_mq_msg_hdr_t) + OS_ALIGN_UP((msg_size), OS_ALIGN_SIZE)) * (msg_count)
/* 定义消息池 */
#define OS_MSGQUEUE_POOL_DEFINE(name, msg_count, msg_size) \
OS_ALIGN(OS_ALIGN_SIZE) \
uint8_t pool_##name[(sizeof(dummy_mq_msg_hdr_t) + \
OS_ALIGN_UP(msg_size, OS_ALIGN_SIZE)) * msg_count]
#define OS_MSGQUEUE_POOL_ADDR(name) ((void *)pool_##name)
#define OS_MSGQUEUE_POOL_SIZE(name) sizeof(pool_##name)
#ifdef OS_USING_HEAP
extern os_msgqueue_id os_msgqueue_create_dynamic(const char *name, os_size_t msg_size,
os_size_t max_msgs);
#endif
extern os_msgqueue_id os_msgqueue_create_static(os_msgqueue_dummy_t *msgqueue,
const char *name,
void *msg_pool,
os_size_t msg_pool_size,
os_size_t msg_size);
extern os_err_t os_msgqueue_destroy(os_msgqueue_id msgqueue_id);
extern os_err_t
os_msgqueue_send(os_msgqueue_id msgqueue_id, const void *buffer, os_size_t buff_size,
os_tick_t timeout);
extern os_err_t
os_msgqueue_send_urgent(os_msgqueue_id msgqueue_id, const void *buffer, os_size_t buff_size,
os_tick_t timeout);
extern os_err_t os_msgqueue_recv(os_msgqueue_id msgqueue_id,
void *buffer,
os_size_t buff_size,
os_tick_t timeout,
os_size_t *recv_msg_size);
extern os_err_t os_msgqueue_set_wake_type(os_msgqueue_id msgqueue_id, uint8_t wake_type);
extern os_err_t os_msgqueue_reset(os_msgqueue_id msgqueue_id);
extern os_err_t os_msgqueue_is_empty(os_msgqueue_id msgqueue_id, os_bool_t *empty_flag);
extern os_err_t os_msgqueue_is_full(os_msgqueue_id msgqueue_id, os_bool_t *full_flag);
extern os_err_t os_msgqueue_get_queue_depth(os_msgqueue_id msgqueue_id, uint16_t *depth);
extern os_err_t os_msgqueue_get_max_msg_size(os_msgqueue_id msgqueue_id, os_size_t *max_sz);
extern os_err_t os_msgqueue_get_used_msgs(os_msgqueue_id msgqueue_id, uint16_t *used);
extern os_err_t os_msgqueue_get_unused_msgs(os_msgqueue_id msgqueue_id, uint16_t *unused);
extern const char *os_msgqueue_get_name(os_msgqueue_id msgqueue_id);
#endif /* OS_USING_MESSAGEQUEUE */
#ifdef __cplusplus
}
#endif
#endif /* __OS_MQ_H__ */关键说明
| API | 功能 | 说明 |
|---|---|---|
os_msgqueue_send | 发送消息 | 放入队尾,timeout 满时等待 |
os_msgqueue_send_urgent | 紧急发送 | 放入队首,高优先级处理 |
os_msgqueue_recv | 接收消息 | 从队首取出,返回实际消息大小 |
OS_MSGQUEUE_POOL_DEFINE | 静态定义池 | 避免动态内存分配,适合资源受限场景 |