$darkmode
RuiChing API 参考手册
V0.9.1

提供可变长度消息传递服务 更多...

结构体

struct  rt_messagequeue
 消息队列结构体
更多...
 

类型定义

typedef struct rt_messagequeuert_mq_t
 消息队列类型指针定义
 

函数

rt_err_t rt_mq_init (rt_mq_t mq, const char *name, void *msgpool, rt_size_t msg_size, rt_size_t pool_size, rt_uint8_t flag)
 初始化静态消息队列 更多...
 
rt_err_t rt_mq_detach (rt_mq_t mq)
 脱离静态消息队列 更多...
 
rt_mq_t rt_mq_create (const char *name, rt_size_t msg_size, rt_size_t max_msgs, rt_uint8_t flag)
 创建动态消息队列 更多...
 
rt_err_t rt_mq_delete (rt_mq_t mq)
 删除动态消息队列 更多...
 
rt_err_t rt_mq_send (rt_mq_t mq, const void *buffer, rt_size_t size)
 向消息队列发送消息 更多...
 
rt_err_t rt_mq_send_wait (rt_mq_t mq, const void *buffer, rt_size_t size, rt_int32_t timeout)
 等待发送消息至消息队列 更多...
 
rt_err_t rt_mq_urgent (rt_mq_t mq, const void *buffer, rt_size_t size)
 发送紧急消息 更多...
 
rt_ssize_t rt_mq_recv (rt_mq_t mq, void *buffer, rt_size_t size, rt_int32_t timeout)
 接收消息 更多...
 
rt_err_t rt_mq_control (rt_mq_t mq, int cmd, void *arg)
 控制消息队列属性 更多...
 

详细描述

提供可变长度消息传递服务

RT-Thread 消息队列特性:

典型应用场景:

函数说明

◆ rt_mq_init()

rt_err_t rt_mq_init ( rt_mq_t  mq,
const char *  name,
void *  msgpool,
rt_size_t  msg_size,
rt_size_t  pool_size,
rt_uint8_t  flag 
)

初始化静态消息队列

使用用户提供的内存初始化静态分配的消息队列

参数
[in]mq消息队列对象指针
[in]name消息队列名称
[in]msgpool消息缓冲区起始地址
[in]msg_size单条消息的字节大小
[in]pool_size消息缓冲区的总字节大小
[in]flag等待标志位
标志位 含义
RT_IPC_FLAG_FIFO 先进先出方式等待
RT_IPC_FLAG_PRIO 按线程优先级等待(高优先级先获取)
返回值
RT_EOK成功
!RT_EOK失败

◆ rt_mq_detach()

rt_err_t rt_mq_detach ( rt_mq_t  mq)

脱离静态消息队列

释放静态消息队列资源

参数
[in]mq消息队列对象指针
返回值
RT_EOK成功
!RT_EOK失败
警告
  • 需要脱离的静态消息队列必须由 rt_mq_init() 初始化

◆ rt_mq_create()

rt_mq_t rt_mq_create ( const char *  name,
rt_size_t  msg_size,
rt_size_t  max_msgs,
rt_uint8_t  flag 
)

创建动态消息队列

动态分配内存并创建新的消息队列对象

参数
[in]name消息队列名称
[in]msg_size单条消息的字节大小
[in]max_msgs最大消息数量
[in]flag等待标志位
标志位 含义
RT_IPC_FLAG_FIFO 先进先出方式等待
RT_IPC_FLAG_PRIO 按线程优先级等待(高优先级先获取)
返回值
!RT_NULL成功
RT_NULL失败

◆ rt_mq_delete()

rt_err_t rt_mq_delete ( rt_mq_t  mq)

删除动态消息队列

释放消息队列占用的资源并销毁该对象

参数
[in]mq消息队列对象指针
返回值
RT_EOK成功
!RT_EOK失败
警告

◆ rt_mq_send()

rt_err_t rt_mq_send ( rt_mq_t  mq,
const void *  buffer,
rt_size_t  size 
)

向消息队列发送消息

非阻塞发送方式,立即尝试将消息发送至消息队列

参数
[in]mq消息队列对象指针
[in]buffer待发送的数据缓冲区指针
[in]size消息长度,单位字节
返回值
RT_EOK成功
!RT_EOK失败
警告
  • 消息长度 size 参数必须小于等于 mq 初始化时指定的消息大小

◆ rt_mq_send_wait()

rt_err_t rt_mq_send_wait ( rt_mq_t  mq,
const void *  buffer,
rt_size_t  size,
rt_int32_t  timeout 
)

等待发送消息至消息队列

若队列满,则阻塞等待指定时间直到成功发送或超时

参数
[in]mq消息队列对象指针
[in]buffer待发送的数据缓冲区指针
[in]size消息长度
[in]timeout超时时间
标志位 含义
RT_WAITING_FOREVER 永久等待
RT_WAITING_NO 不等待立即返回
其他数值 timeout * 系统 tick 超时时间
返回值
RT_EOK成功
-RT_ETIMEOUT超时
!RT_EOK失败
警告
  • 消息长度 size 参数必须小于等于 mq 初始化时指定的消息大小

◆ rt_mq_urgent()

rt_err_t rt_mq_urgent ( rt_mq_t  mq,
const void *  buffer,
rt_size_t  size 
)

发送紧急消息

紧急消息优先入队,插入到消息队列头部

参数
[in]mq消息队列对象指针
[in]buffer待发送数据的缓冲区指针
[in]size数据字节大小
返回值
RT_EOK成功
!RT_EOK失败
注解
  • 紧急消息具有更高优先级,会优先被接收

◆ rt_mq_recv()

rt_ssize_t rt_mq_recv ( rt_mq_t  mq,
void *  buffer,
rt_size_t  size,
rt_int32_t  timeout 
)

接收消息

从消息队列中接收消息,若队列为空则阻塞等待

参数
[in]mq消息队列对象指针
[out]buffer接收数据的缓冲区指针
[in]size缓冲区字节大小
[in]timeout超时时间
标志位 含义
RT_WAITING_FOREVER 永久等待
RT_WAITING_NO 不等待立即返回
其他数值 timeout * 系统 tick 超时时间
返回值
>0成功
<0失败
-RT_ETIMEOUT超时
警告
  • 消息长度 size 参数必须小于等于 mq 初始化时指定的消息大小

◆ rt_mq_control()

rt_err_t rt_mq_control ( rt_mq_t  mq,
int  cmd,
void *  arg 
)

控制消息队列属性

运行时改变消息队列属性

参数
[in]mq消息队列对象指针
[in]cmd控制命令
[in]arg命令参数指针
返回值
RT_EOK成功
!RT_EOK失败