文章目录
鸿蒙在CMSIS-RTOS2接口中封装了LiteOS-M的内核代码。因此当需要使用CMSIS-RTOS2接口时,只需要调用相应接口就行了。本篇文章将会记录官网API的使用方法以及使用案例,记录自己学习的想法和使用技巧会保持持续更新哟!!!
CMSIS-RTOS API v2
接口顺序将会按照小熊派官网视频讲解的顺序记录以便自己学习和使用。
事件标记
外文名称:Event Flags
源接口地址:Event Flags
HarmonyOS_PPT:HarmonyOS内核开发-事件标记.pdf
通过事件标记可以控制或等待信号,每个信号可以最多拥有31个事件标记,因此可以通过多个事件标记触发信号。
任务
- 当任务进入BLOCKED状态,可以通过这事件标记设置等待(再次被唤醒)
- 可以在任何其他任务里面为当前任务设置一个或多个事件标记
- 可以使用osEventFlagsClear清除当前任务的信号或其他任务的信号
注意事项
- 任务被唤醒且执行后,信号标记会被自动清除掉
结构体(数据类型)
osEventFlagsAttr_t
所属函数:osEventFlagsNew
数据类型 | 属性名称 | 描述 | 默认值 | 备注 |
---|---|---|---|---|
const char * | name | 事件标记名称 | NULL | |
uint32_t | attr_bits | 保留字段 | 0U | |
void * | cb_mem | 事件标记块指针 | NULL | |
uint32_t | cb_size | 事件标记块指针大小 | 0U |
osEventFlagsId_t
所属函数:[ osEventFlagsSet| osEventFlagsClear| osEventFlagsGet| osEventFlagsWait| osEventFlagsDelete]
所属函数返回值:osEventFlagsNew
事件标记ID,即事件标记唯一标识符
功能(函数)
osEventFlagsNew:新建事件标记
参数名称 | 数据类型 | 描述 |
---|---|---|
attr | const osEventFlagsAttr_t * | 事件标记的属性 |
返回值 | osEventFlagsId_t | 事件标记ID |
创建事件标记用于通过任务发送事件。
注意事项
- 事件标记只有在使用 osEventFlagsNew 后,才能被调用
- 可以在RTOS开始前进行调用
- 出错返回NULL
osEventFlagsSet:设置事件标记
参数名称 | 数据类型 | 描述 |
---|---|---|
ef_id | osEventFlagsId_t | 事件标记ID |
flags | uint32_t | 将要设置的标记 |
返回值 | uint32_t | 设置好的标记 |
如果优先级高的任务设置了等待flags,那么将会从BLOCKED状态告知恢复。
当osFlagsNoClear给到调用osEventFlagsWait的priority order,那么可能更多的任务被唤醒。
Flags Functions Error Codes
参数名称 | 描述 |
---|---|
osFlagsErrorUnknown | 未知错误 |
osFlagsErrorParameter | 事件标记ID为NULL、无效或flags太高 |
osFlagsErrorResource | 无效状态 |
osEventFlagsWait: 等待事件标记触发
参数名称 | 数据类型 | 描述 |
---|---|---|
ef_id | osEventFlagsId_t | 事件标记ID |
flags | uint32_t | 标记 |
options | uint32_t | 标记的选项 |
timeout | uint32_t | 超时值 |
返回值 | uint32_t | 之前的标记 |
暂停当前RUNNING的任务直到any or all event flags通过参数flags确定。
当已经设置好event flags,函数立即返回;否则任务进入 BLOCKED状态。
options
所属函数:osEventFlagsWait
选项 | 描述 |
---|---|
osFlagsWaitAny | 等待any flag,默认值 |
osFlagsWaitAll | 等待all flag |
osFlagsNoClear | 不清除等待标记 |
注意事项
- 对于设置了osFlagsNoClear标记,只能利用 osEventFlagsClear手动清除标记
timeout
超时值 | 描述 |
---|---|
0 | 函数立即返回 |
osWaitForever | 函数无限等待直至修改当前值 |
uint32_t | 超时值 |
Flags Functions Error Codes
参数名称 | 描述 |
---|---|
osFlagsErrorUnknown | 未知错误 |
osFlagsErrorTimeout | 标记没有在超时值期间 |
osFlagsErrorResource | 标记或超时值没有设置 |
osFlagsErrorParameter | 标记ID无效或标记设置太高了 |
osEventFlagsDelete:删除事件标记
参数名称 | 数据类型 | 描述 |
---|---|---|
ef_id | osEventFlagsId_t | 标记ID |
返回值 | osStatus_t | 操作结果 |
注意事项
- 调用这函数相应的事件标记ID将会失效,不再其作用
osStatus_t
参数名称 | 描述 |
---|---|
osOK | 操作成功 |
osErrorParameter | 标记ID为NULL或无效 |
osErrorResource | 无效状态 |
osErrorISR | 不能被终止 |
osEventFlagsClear:清除事件标记
参数名称 | 数据类型 | 描述 |
---|---|---|
ef_id | osEventFlagsId_t | 标记ID |
flags | uint32_t | 标记 |
返回值 | uint32_t | 清除的标记 |
Flags Functions Error Codes
参数名称 | 描述 |
---|---|
osFlagsErrorUnknown | 未知错误 |
osFlagsErrorParameter | 事件标记ID为NULL、无效或flags太高 |
osFlagsErrorResource | 无效状态 |
osEventFlagsGetName:获取事件标记名称
参数名称 | 数据类型 | 描述 |
---|---|---|
ef_id | osEventFlagsId_t | 标记ID |
返回值 | const char * | 标记名称,默认值为 " " |
注意事项
- 出错返回NULL
osEventFlagsGet:获取当前事件标记
参数名称 | 数据类型 | 描述 |
---|---|---|
ef_id | osEventFlagsId_t | 标记ID |
返回值 | uint32_t | 标记名称,默认值为 " " |
注意事项
- 出错返回0