$darkmode
提供可变长度消息传递服务 更多...
结构体 | |
struct | rt_messagequeue |
消息队列结构体 更多... | |
类型定义 | |
typedef struct rt_messagequeue * | rt_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_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_EOK | 成功 |
!RT_EOK | 失败 |
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 | ||
) |
创建动态消息队列
动态分配内存并创建新的消息队列对象
[in] | name | 消息队列名称 | ||||||
[in] | msg_size | 单条消息的字节大小 | ||||||
[in] | max_msgs | 最大消息数量 | ||||||
[in] | flag | 等待标志位
|
!RT_NULL | 成功 |
RT_NULL | 失败 |
rt_err_t rt_mq_delete | ( | rt_mq_t | mq | ) |
删除动态消息队列
释放消息队列占用的资源并销毁该对象
[in] | mq | 消息队列对象指针 |
RT_EOK | 成功 |
!RT_EOK | 失败 |
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 | 失败 |
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_EOK | 成功 |
-RT_ETIMEOUT | 超时 |
!RT_EOK | 失败 |
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_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 | 超时时间
|
>0 | 成功 |
<0 | 失败 |
-RT_ETIMEOUT | 超时 |
rt_err_t rt_mq_control | ( | rt_mq_t | mq, |
int | cmd, | ||
void * | arg | ||
) |
控制消息队列属性
运行时改变消息队列属性
[in] | mq | 消息队列对象指针 |
[in] | cmd | 控制命令 |
[in] | arg | 命令参数指针 |
RT_EOK | 成功 |
!RT_EOK | 失败 |