【翻译CMSIS_RTOS2 API v2】鸿蒙CMSIS-RTOS2接口之消息队列

文章目录

鸿蒙在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

注意事项

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
上一篇:Cron task


下一篇:结构体对齐和枚举类型