tobudos-kernel/osal/cosit/documentation/message_queue.md

6.9 KiB
Raw Blame History

消息队列

消息队列Message Queue是一种常见的异步任务间通讯方式用于在任务与任务间任务与中断间传递不定长的数据。任务能够从队列里面读取消息当队列中的消息为空时挂起读取任务当队列中有新消息时挂起的读取任务被唤醒并处理新消息。任务也能够往队列里写入消息当队列已经写满消息时挂起写入任务当队列中有空闲消息节点时挂起的写入任务被唤醒并写入消息。

类型

typedef struct cos_messagequeue* cos_mq_t;

消息队列控制块消息队列控制块是操作系统用于管理消息队列的一个数据机构由结构体cos_messagequeue表示cos_mq_t是消息队列的句柄。

函数

cos_mq_create

创建消息队列

原型


#include <cos_mq.h>
cos_status_t cos_mq_create(const char* name, size_t msg_size,
                    size_t max_msgs, uint8_t flagcos_mq_t* mq);

描述 创建一个消息队列,由系统动态为消息队列申请内存空间,并返回消息队列的句柄。

参数

参数名称 参数类型 参数方向 描述
name const char* 入参 消息队列的名称
msg_size size_t 入参 单条消息的最大长度
max_msgs size_t 入参 消息队列的最大个数
flag uint8_t 入参 消息队列工作方式 COS_IPC_FLAG_FIFO 或 COS_IPC_FLAG_PRIO
mq cos_mq_t 出参 消息队列句柄

返回值 函数执行成功返回COS_OK失败则返回错误码均为负值

参数名称 描述
COS_ERROR_PARAM 非法参数
COS_ERR_NOMEM 内存不足
COS_ERR_ISR 在中断上下文中调用
COS_ERR 未知错误

cos_mq_init

创建消息队列

init


#include <cos_mq.h>
cos_status_t cos_mq_init(const char* name, void *msgpool, size_t msg_size,
                    size_t max_msgs, cos_mq_t mq);

描述 创建一个静态消息队列,由编译器提前为消息队列在编译时分配内存空间。

参数

参数名称 参数类型 参数方向 描述
name const char* 入参 消息队列的名称
msgpool void* 入参 指向存放消息的缓冲区的指针
msg_size size_t 入参 单条消息的最大长度,单位字节
flag uint8_t 入参 消息队列工作方式 cos_IPC_FLAG_FIFO 或 cos_IPC_FLAG_PRIO
mq cos_mq_t 出参 消息队列句柄

返回值 函数执行成功返回cos_OK失败则返回错误码均为负值

参数名称 描述
COS_ERROR_PARAM 非法参数

cos_mq_delete

删除消息队列

原型


#include <cos_mq.h>
cos_status_t cos_mq_delete(cos_mq_t mq);

描述 删除一个消息队列。

参数

参数名称 参数类型 参数方向 描述
mq cos_mq_t 入参 消息队列的句柄

返回值 函数执行成功返回cos_OK失败则返回错误码均为负值

参数名称 描述
COS_ERROR_PARAM 非法参数

cos_mq_deinit

去初始化消息队列

原型


#include <cos_mq.h>
cos_status_t cos_mq_deinit(cos_mq_t mq);

描述 去初始化一个消息队列。

参数

参数名称 参数类型 参数方向 描述
mq cos_mq_t 入参 消息队列的句柄

返回值 函数执行成功返回cos_OK失败则返回错误码均为负值

参数名称 描述
COS_ERROR_PARAM 非法参数

cos_mq_send

发送消息

原型


#include <cos_mq.h>
cos_status_t cos_mq_send(cos_mq_t mqvoid* buffer, size_t size);

描述 发送消息,线程或者中断服务程序都可以给消息队列发送消息。

参数

参数名称 参数类型 参数方向 描述
mq cos_mq_t 入参 消息队列的句柄
buffer void* 入参 消息内容
size size_t 入参 消息大小

返回值 函数执行成功返回cos_OK失败则返回错误码均为负值

参数名称 描述
COS_ERROR_PARAM 非法参数
COS_ERROR_MQ_DELETED 线程挂起时消息队列已被删除
COS_ERROR_MQ_FULL 消息队列已满

cos_mq_recive

接收消息

原型


#include <cos_mq.h>
cos_status_t cos_mq_recv(cos_mq_t mqvoid* buffer, 
        size_t sizeint32_t timeout);

描述 当消息队列中有消息时,接收者才能接收消息,否则接收者会根据超时时间设置,或挂起在消息队列的等待线程队列上,或直接返回。

参数

参数名称 参数类型 参数方向 描述
mq cos_mq_t 入参 消息队列的句柄
buffer void* 入参 消息内容
size size_t 入参 消息大小
timeout int32_t 入参 指定的超时时间

返回值 函数执行成功返回cos_OK失败则返回错误码均为负值

参数名称 描述
COS_ERROR_PARAM 非法参数
COS_ERROR_MQ_TIMEOUT 超时
COS_ERROR_PARAM 消息队列已满
COS_ERROR_MQ_DELETED 线程挂起时消息队列已被删除