鸿蒙在CMSIS-RTOS2接口中封装了LiteOS-M的内核代码。因此当需要使用CMSIS-RTOS2接口时,只需要调用相应接口就行了。本篇文章将会记录官网API的使用方法以及使用案例,记录自己学习的想法和使用技巧会保持持续更新哟!!!

CMSIS-RTOS API v2

接口顺序将会按照小熊派官网视频讲解的顺序记录以便自己学习和使用。

互斥锁

外文名称:Mutex Management
源接口地址:Mutex Management
HarmonyOS_PPT:HarmonyOS内核开发-互斥锁.pdf

用于保护共享资源的访问,互斥体可以在任务中传递。

  • 任何时刻只能有一个任务访问具有互斥锁的资源

结构体(数据类型)

osMutexAttr_t

所属函数:osMutexNew

数据类型属性名称描述默认值备注
const char *name互斥锁名称NULL
uint32_tattr_bits属性位0U
void *cb_mem互斥锁块指针NULL
uint32_tcb_size互斥锁块指针大小0U
osMutexRecursive

所属结构体:osMutexAttr_t

attr_bits 设置为 osMutexRecursive。

  • 同一任务使用多个互斥锁且不会自锁
  • 拥有这个互斥锁的任务lock数会递增
  • 互斥锁需要释放多次直至lock数为0
  • 互斥锁lock数为0时,其他任务可以获得这个互斥锁
osMutexPrioInherit

所属结构体:osMutexAttr_t

attr_bits 设置为 osMutexPrioInherit。

  • 如果设置优先级继承策略,那么优先级翻转问题会得到解决
  • 如果没有优先级继承策略,那么可能高优先级任务会被低优先级任务给阻塞
osMutexRobust

所属结构体:osMutexAttr_t

attr_bits 设置为 osMutexRobust。

  • 如果互斥锁里面的任务处于TERMINATED状态,那么互斥锁将会自动释放
  • 如果没有设置这个属性,互斥锁不会自动释放需要手动

osMutexId_t

所属函数:[ osMutexGetName| osMutexAcquire|osMutexRelease| osMutexGetOwner| osMutexDelete]

所属函数返回值:osMutexNew

互斥锁ID,即互斥锁唯一标识符

功能(函数)

osMutexNew:新建互斥锁

参数名称数据类型描述
attrconst osMutexAttr_t*互斥锁的属性
返回值osMutexId_t互斥锁ID

注意事项

  • 互斥锁只有在 osMutexNew 使用后,才能被调用
  • 可以在RTOS开始前进行调用
  • 出错返回NULL

osMutexAcquire:阻塞互斥锁

参数名称数据类型描述
mutex_idosMutexId_t互斥锁ID
timeoutuint32_t超时值,默认值为0U
返回值osStatus_t操作结果
  • timeout设置系统多久获取互斥锁,在此期间任务属于BLOCKED状态
timeout
超时值描述
0U互斥锁立即返回
osWaitForever互斥锁无限等待,直至互斥锁可用
uint32_t超时值
osStatus_t
参数名称描述
osOK操作成功
osErrorParameter互斥锁ID为NULL
osErrorResource没有指定超时值
osErrorISR不能被终止
osErrorTimeout互斥锁无法获取

osMutexRelease: 释放互斥锁

参数名称数据类型描述
mutex_id osMutexId_t互斥锁ID
返回值osStatus_t操作结果
  • 等待当前互斥锁的任务的状态变为READY状态
osStatus_t
参数名称描述
osOK操作成功
osErrorParameter互斥锁ID为NULL或无效
osErrorResource互斥锁不能释放
osErrorISR不能被终止

osMutexDelete:删除互斥锁

参数名称数据类型描述
mutex_id osMutexId_t互斥锁ID
返回值osStatus_t操作结果
  • 释放互斥锁获得的内存
  • 互斥锁ID不可使用,需通过osMutexNew再次创建
osStatus_t
参数名称描述
osOK操作成功
osErrorParameter互斥锁ID为NULL或无效
osErrorResource无状态
osErrorISR不能被终止

osMutexGetName:获取互斥锁名称

参数名称数据类型描述
mutex_idosMutexId_t互斥锁ID
返回值const char *互斥锁名称,默认值为 " "

注意事项

  • 出错返回NULL

osMutexGetOwner:获取互斥锁里面任务ID

参数名称数据类型描述
mutex_idosMutexId_t互斥锁ID
返回值osThreadId_t任务ID

注意事项

  • 没有互斥锁返回NULL
  • 出错返回NULL
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐