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
Comments NOTHING