CMSIS-RTOS2常用API

发布于 2023-08-13  347 次阅读


内容纲要

CMSIS-RTOS简介

​ CMSIS-RTOS相当于将不同厂家的RTOS封装一下,形成的一个标准的API函数库。

结构体(数据类型)

osThreadAttr_t

所属函数:osThreadNew

数据类型 属性名称 描述 默认值 备注
const char * name 任务名称 NULL
uint32_t attr_bits 设置 osThreadJoin 0U
void * cb_mem 任务块指针 NULL
uint32_t cb_size 任务块指针大小 0U
void * stack_mem 任务栈指针 NULL
uint32_t stack_size 任务栈指针大小 0U
osPriority_t priority 任务优先级 osPriorityNormal
TZ_ModuleId_t tz_module TrustZone模块标识 0U
uint32_t reserved 保留字段 0U

osThreadJoinable

所属结构体:osThreadAttr_t

通过属性名称attr_bits设置,attr_bits = 1U

任务与资源的关联

osThreadDetached

所属结构体:osThreadAttr_t

属性名称attr_bits的默认值,attr_bits = 0U

断开任务与资源的关联,并在任务Terminated后资源将会重新归还系统给其他任务使用。

osPriority_t

所属结构体:osThreadAttr_t

属性名称priority,默认值osPriorityNormal

优先级 描述
osPriorityNone
osPriorityIdle 预留给空闲任务(不可使用)
osPriorityLow 8个低级优先级
osPriorityBelowNormal 8个低于正常优先级
osPriorityNormal 8个正常优先级
osPriorityAboveNormal 8个高于正常优先级
osPriorityHigh 8个高级优先级
osPriorityRealtime 8个实时优先级
osPriorityISR 预留给ISR延迟任务(不可使用)
osPriorityError 优先级错误
osPriorityReserved 保留字段

osThreadFunc_t

所属函数:osThreadNew

任务入口函数,即任务去执行的函数。

如果函数不是osThreadFunc_t类型,使用时需要给函数转换类型为osThreadFunc_t

osThreadId_t

所属函数:[ osThreadTerminate | osThreadSuspend | osThreadResume ]

所属函数返回值:[ osThreadNew | osThreadGetId | osThreadEnumerate | osMutexGetOwner ]

任务ID,即线程号。

可以定位到一个具体任务上面。

osThreadState_t

所属函数返回值:osThreadGetState_t

状态 描述
osThreadInactive 任务未工作
osThreadReady 任务就绪,随时准备工作
osThreadRunning 任务开始运行
osThreadBlocked 任务阻塞,任务等待中
osThreadTerminated 任务终止,任务停止运行
osThreadError 任务出错,任务不存在或没有scheduled
osThreadReserved 保留字段

功能(函数)

osThreadNew:新建任务(线程)

参数名称 数据类型 描述
func osThreadFunc_t 任务入口函数
argument void * 任务入口函数的参数
attr const osThreadAttr_t 任务的属性
返回值 osThreadId_t 任务ID

将任务添加到active任务列表中,将任务状态设置为READY

osThreadTerminate:终止任务(线程)

参数名称 数据类型 描述
thread_id osThreadId_t 任务ID
返回值 osStatus_t 操作结果

将任务从active任务列表中移除掉。

如果任务当前状态为RUNNING时被该函数终止,这让下一个任务状态为READY的任务开始RUNNING

如果任务不存在则不会终止该任务,而是返回osErrorResource

osStatus_t

参数名称 描述
osOK 操作成功
osErrorParameter 任务ID为NULL或无效
osErrorResource 任务无效或没有其他任务存在
osErrorISR 任务不能被终止

osThreadSuspend:挂起任务(线程)

参数名称 数据类型 描述
thread_id osThreadId_t 任务ID
返回值 osStatus_t 操作结果

如果当前作用域下有一个任务状态设置为BLOCKED,那么下一个任务状态为READY的任务开始RUNNING

如果任务状态为BLOCKED的任务通过 osThreadResume 函数将其恢复,那么任务状态改为READY

osStatus_t

参数名称 描述
osOK 操作成功
osErrorParameter 任务ID为NULL或无效
osErrorResource 任务无效或没有其他任务存在
osErrorISR 任务不能被终止

osThreadResume:恢复任务(线程)

参数名称 数据类型 描述
thread_id osThreadId_t 任务ID
返回值 osStatus_t 操作结果

将状态变为BLOCKED的任务重新回到READY状态。

通过该函数恢复的任务在当前作用域下,如果其优先级高于某个状态为RUNNING的任务,那么其任务状态直接切换为RUNNIG

建议:不提倡将不是通过osThreadSuspend函数终止的任务,直接通过该函数进行恢复。

osStatus_t

参数名称 描述
osOK 操作成功
osErrorParameter 任务ID为NULL或无效
osErrorResource 任务无效或没有其他任务存在
osErrorISR 任务不能被终止

osThreadGetName:获取任务名

参数名称 数据类型 描述
thread_id osThreadId_t 任务ID
返回值 name 任务名称,默认值为 " "

osThreadGetId:获取当前任务状态为RUNNING的任务ID(线程号)

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

osThreadGetState:获取任务状态

参数名称 数据类型 描述
thread_id osThreadId_t 任务ID
返回值 osThreadState_t 任务状态

如果任务被ISR调用则会返回*osThreadError*。

osThreadState_t

所属函数返回值:osThreadGetState_t

状态 描述
osThreadInactive 任务未工作
osThreadReady 任务就绪,随时准备工作
osThreadRunning 任务开始运行
osThreadBlocked 任务阻塞,任务等待中
osThreadTerminated 任务终止,任务停止运行
osThreadError 任务出错,任务不存在或没有scheduled
osThreadReserved 保留字段

osThreadSetPriority:设置或改变任务优先级

参数名称 数据类型 描述
thread_id osThreadId_t 任务ID
priority osPriority_t 任务优先级
返回值 osStatus_t 操作结果

osPriority_t

所属结构体:osThreadAttr_t

属性名称priority,默认值osPriorityNormal

优先级 描述
osPriorityNone
osPriorityIdle 预留给空闲任务(不可使用)
osPriorityLow 8个低级优先级
osPriorityBelowNormal 8个低于正常优先级
osPriorityNormal 8个正常优先级
osPriorityAboveNormal 8个高于正常优先级
osPriorityHigh 8个高级优先级
osPriorityRealtime 8个实时优先级
osPriorityISR 预留给ISR延迟任务(不可使用)
osPriorityError 优先级错误
osPriorityReserved 保留字段

osStatus_t

参数名称 描述
osOK 操作成功
osErrorParameter 任务ID为NULL或无效
osErrorResource 任务无效或没有其他任务存在
osErrorISR 任务不能被终止

osThreadGetPriority:获取任务优先级

参数名称 数据类型 描述
thread_id osThreadId_t 任务ID
返回值 osPriority_t 任务优先级

osPriority_t

所属结构体:osThreadAttr_t

属性名称priority,默认值osPriorityNormal

优先级 描述
osPriorityNone
osPriorityIdle 预留给空闲任务(不可使用)
osPriorityLow 8个低级优先级
osPriorityBelowNormal 8个低于正常优先级
osPriorityNormal 8个正常优先级
osPriorityAboveNormal 8个高于正常优先级
osPriorityHigh 8个高级优先级
osPriorityRealtime 8个实时优先级
osPriorityISR 预留给ISR延迟任务(不可使用)
osPriorityError 优先级错误
osPriorityReserved 保留字段

osThreadYield:切换任务流

如果由相同优先级的READY状态的任务,那么就开始执行它;如果没有那么继续执行当前任务。

注意事项

  • 被切换的任务状态不会设置为BLOCKED状态
  • 低优先级的READY状态的任务不会被切换到

osStatus_t

参数名称 描述
osOK 操作成功
osError 未知错误
osErrorISR 任务不能被终止

osThreadDetach:将任务改变为osThreadDetached

参数名称 数据类型 描述
thread_id osThreadId_t 任务ID
返回值 osPriority_t 任务优先级

当某个任务该函数执行,那么该任务状态为TERMINATED时将会归还所有资源给系统。

任务定义为osThreadDetached时,将不会有任何改变。

osStatus_t

参数名称 描述
osOK 操作成功
osErrorParameter 任务ID为NULL或无效
osErrorResource 任务无效状态
osErrorISR 任务不能被终止

osThreadJoin:任务已经运行完成的信号

参数名称 数据类型 描述
thread_id osThreadId_t 任务ID
返回值 osPriority_t 任务优先级

注意事项

  • 任务状态不为TERMINATED时,会一直等待结果
  • 任务状态为TERMINATED时,立马返回结果

osStatus_t

参数名称 描述
osOK 操作成功
osErrorParameter 任务ID为NULL或无效
osErrorResource 任务无效状态
osErrorISR 任务不能被终止

osThreadExit:终止调用任务

不是很懂,应该是可以将结果同步到 osThreadJoin

osThreadGetStackSize:获取任务栈大小

参数名称 数据类型 描述
thread_id osThreadId_t 任务ID
返回值 uint32_t 任务栈大小,Bytes

osThreadGetStackSpace:获取剩余任务栈空间

参数名称 数据类型 描述
thread_id osThreadId_t 任务ID
返回值 uint32_t 任务栈大小,Bytes

注意事项

  • 出错会返回0
  • 似乎只能在Stack watermark recording期间才能使用(参考 Thread Configuration

osThreadGetCount:获取active任务数量

注意事项

  • 出错会返回0

osThreadEnumerate:枚举任务数

参数名称 数据类型 描述
thread_array osThreadId_t 任务数组
array_items uint32_t 接收任务ID的数量
返回值 uint32_t 枚举的任务数

注意事项

  • 出错会返回0
世界のネズミは彼らが望むものに依存し、彼らは彼ら自身から誰も求めません
最后更新于 2023-09-02