$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 | 失败 |