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