【翻译CMSIS_RTOS2 API v2】鸿蒙CMSIS-RTOS2接口之消息队列
RTOS消息队列接口的使用以及问题
·
文章目录
- CMSIS-RTOS API v2
-
- 消息队列
- 结构体(数据类型)
- 功能(函数)
鸿蒙在CMSIS-RTOS2接口中封装了LiteOS-M的内核代码。因此当需要使用CMSIS-RTOS2接口时,只需要调用相应接口就行了。本篇文章将会记录官网API的使用方法以及使用案例,记录自己学习的想法和使用技巧会保持持续更新哟!!!
CMSIS-RTOS API v2
接口顺序将会按照小熊派官网视频讲解的顺序记录以便自己学习和使用。
消息队列
外文名称:Message Queue
源接口地址:Message Queue
HarmonyOS_PPT:HarmonyOS内核开发-消息队列.pdf
用于任务间基本通信模型,一个任务发送数据然后另一个任务接收它,相比消息共享更加类似于某种I/O流。
- 数据通过FIFO操作将其从当前任务到另一个任务的传递
- 可以控制消息的发送、接收或等待
结构体(数据类型)
osMessageQueueAttr_t
所属函数: osMessageQueueNew
| 数据类型 | 属性名称 | 描述 | 默认值 | 备注 |
|---|---|---|---|---|
| const char * | name | 消息队列名称 | NULL | |
| uint32_t | attr_bits | 保留字段 | 0U | |
| void * | cb_mem | 消息队列块指针 | NULL | |
| uint32_t | cb_size | 消息队列指针大小 | 0U | |
| void * | mq_mem | 消息队列数据缓存 | NULL | |
| uint32_t | mq_size | 消息队列数据缓存大小 | 0U |
osMessageQueueId_t
所属函数:[osMessageQueueGetName | osMessageQueuePut | osMessageQueueGet | osMessageQueueGetCapacity | osMessageQueueGetMsgSize | osMessageQueueGetCount | osMessageQueueGetSpace | osMessageQueueReset | osMessageQueueDelete ]
所属函数返回值:osMessageQueueNew
消息队列ID,即消息队列唯一标识符
功能(函数)
osMessageQueueNew:新建消息队列
| 参数名称 | 数据类型 | 描述 |
|---|---|---|
| msg_count | uint32_t | 队列最大消息数量 |
| msg_size | uint32_t | 最大消息块大小 |
| attr | const osMessageQueueAttr_t * | 消息队列的属性,默认值 NULL |
| 返回值 | osMessageQueueId_t | 消息队列ID |
注意事项
- 可以使用osKernelStart将在RTOS内核开始前的消息队列调用起来
- 可以在osKernelInitialize开始后进行调用
- 出错返回NULL
osMessageQueuePut:发送消息
| 参数名称 | 数据类型 | 描述 |
|---|---|---|
| mq_id | osMessageQueueId_t | 消息队列ID |
| msg_ptr | const void * | 缓存消息 |
| msg_prio | uint8_t | 消息优先级 |
| timeout | uint32_t | 超时值,默认 0U |
| 返回值 | osStatus_t | 操作结果 |
- timeout指定系统等待将信息放入队列的时间
- 当系统等待时,任务回调函数处于BLOCKED状态
timeout
| 超时值 | 描述 |
|---|---|
| 0U | 消息队列立即返回 |
| osWaitForever | 消息队列无限等待,直至可用 |
| uint32_t | 超时值 |
osStatus_t
| 参数名称 | 描述 |
|---|---|
| osOK | 操作成功 |
| osErrorParameter | 互斥锁ID为NULL |
| osErrorResource | 队列没有足够空间 |
| osErrorISR | 不能被终止 |
| osErrorTimeout | 规定时间信息未放入队列 |
osMessageQueueGet:获取消息
| 参数名称 | 数据类型 | 描述 |
|---|---|---|
| mq_id | osMessageQueueId_t | 消息队列ID |
| msg_ptr | const void * | 缓存消息 |
| msg_prio | uint8_t | 消息优先级 |
| timeout | uint32_t | 超时值,默认 0U |
| 返回值 | osStatus_t | 操作结果 |
- timeout指定系统等待从队列中检索信息的时间
- 当系统等待时,任务回调函数处于BLOCKED状态
timeout
| 超时值 | 描述 |
|---|---|
| 0U | 消息队列立即返回 |
| osWaitForever | 消息队列无限等待,直至可用 |
| uint32_t | 超时值 |
osStatus_t
| 参数名称 | 描述 |
|---|---|
| osOK | 操作成功 |
| osErrorParameter | 互斥锁ID为NULL |
| osErrorResource | 没有获取到 |
| osErrorISR | 不能被终止 |
| osErrorTimeout | 规定时间信息未检索 |
osMessageQueueDelete:删除消息
| 参数名称 | 数据类型 | 描述 |
|---|---|---|
| mq_id | osMessageQueueId_t | 消息队列ID |
| 返回值 | osStatus_t | 操作结果 |
- 释放消息队列内存
- 消息队列ID不可再使用,可以通过 osMessageQueueNew再次创建
osStatus_t
| 参数名称 | 描述 |
|---|---|
| osOK | 操作成功 |
| osErrorParameter | 互斥锁ID为NULL |
| osErrorResource | 消息队列无效 |
| osErrorISR | 不能被终止 |
osMessageQueueReset:重置消息队列
| 参数名称 | 数据类型 | 描述 |
|---|---|---|
| mq_id | osMessageQueueId_t | 消息队列ID |
| 返回值 | osStatus_t | 操作结果 |
osStatus_t
| 参数名称 | 描述 |
|---|---|
| osOK | 操作成功 |
| osErrorParameter | 互斥锁ID为NULL |
| osErrorResource | 消息队列无效 |
| osErrorISR | 不能被终止 |
osMessageQueueGetName:获取消息队列名称
| 参数名称 | 数据类型 | 描述 |
|---|---|---|
| mq_id | osMessageQueueId_t | 消息队列ID |
| 返回值 | const char * | 消息队列名称,默认值 " " |
注意事项
- 出错返回NULL
osMessageQueueGetCapacity:获取最大消息数
| 参数名称 | 数据类型 | 描述 |
|---|---|---|
| mq_id | osMessageQueueId_t | 消息队列ID |
| 返回值 | uint32_t | 消息总数量 |
注意事项
- 出错返回0U
osMessageQueueGetMsgSize: 获取消息块大小
| 参数名称 | 数据类型 | 描述 |
|---|---|---|
| mq_id | osMessageQueueId_t | 消息队列ID |
| 返回值 | uint32_t | 消息块大小 |
注意事项
- 出错返回0U
osMessageQueueGetCount:获取消息队列数量
| 参数名称 | 数据类型 | 描述 |
|---|---|---|
| mq_id | osMessageQueueId_t | 消息队列ID |
| 返回值 | uint32_t | 消息队列数量 |
注意事项
- 出错返回0U
osMessageQueueGetSpace:获取消息队列可用消息块空间
| 参数名称 | 数据类型 | 描述 |
|---|---|---|
| mq_id | osMessageQueueId_t | 消息队列ID |
| 返回值 | uint32_t | 消息块数量 |
注意事项
- 出错返回NULL
更多推荐


所有评论(0)