以下列表简要概述了所有CMSIS-RTOS功能。标有$的函数是可选的。特定的CMSIS-RTOS实现可能无法提供所有功能,但osFeatureXXXX定义明确指出了这一点

注意RTX实现不支持的功能标有(*)。

内核信息和控制

osKernelInitialize:初始化RTOS内核。
osKernelStart:启动RTOS内核。
osKernelRunning:查询RTOS内核是否正在运行。
osKernelSysTick:获取RTOS内核系统计时器计数器。
osKernelSysTickFrequency:RTOS内核系统定时器频率,单位为Hz。
osKernelSysTickMicroSec:将微秒值转换为RTOS内核系统计时器值。

线程管理

osThreadCreate:开始执行线程函数。
osThreadTerminate:停止执行线程函数。
osThreadYield:将执行传递给下一个就绪线程函数。
osThreadGetId:获取线程标识符以引用此线程。
osThreadSetPriority:更改线程函数的执行优先级。
osThreadGetPriority:获取线程函数的当前执行优先级。

通用等待功能

osDelay:等待指定的时间。
osWait:等待Signal,Message或Mail类型的任何事件。(*)

定时器管理

osTimerCreate:定义计时器回调函数的属性。
osTimerStart:使用时间值启动或重新启动计时器。
osTimerStop:停止计时器。
osTimerDelete:删除计时器。

信号事件

osSignalSet:设置线程的信号标志。
osSignalClear:重置线程的信号标志。
osSignalWait:暂停执行,直到设置了特定的信号标志。

互斥

osMutexCreate:定义并初始化互斥锁。
osMutexWait:获取互斥锁或等待它变为可用。
osMutexRelease:释放互斥锁。
osMutexDelete:删除互斥锁。

信号灯

osSemaphoreCreate:定义并初始化信号量。
osSemaphoreWait:获取信号量令牌或等到它可用。
osSemaphoreRelease:释放信号量令牌。
osSemaphoreDelete:删除信号量。

记忆池

osPoolCreate:定义并初始化一个修复大小的内存池。
osPoolAlloc:分配内存块。
osPoolCAlloc:分配一个内存块并将该块置零。
osPoolFree:将内存块返回到内存池。

消息队列

osMessageCreate:定义并初始化消息队列。
osMessagePut:将消息放入消息队列。
osMessageGet:获取消息或暂停线程执行,直到消息到达。

邮件队列

osMailCreate:使用固定大小的内存块定义和初始化邮件队列。
osMailAlloc:分配内存块。
osMailCAlloc:分配一个内存块并将该块置零。
osMailPut:将内存块放入邮件队列。
osMailGet:获取邮件或暂停线程执行,直到邮件到达。
osMailFree:将内存块返回到邮件队列。

RTX特定功能

os_idle_demon:当没有其他线程准备好运行时,系统线程正在运行。
os_suspend:挂起RTX任务调度程序。
os_resume:恢复RTX任务调度程序。
os_tick_init:将备用硬件计时器初始化为RTX内核计时器。
os_tick_val:获取备用硬件计时器的当前值。
os_tick_ovf:获取备用硬件定时器的溢出标志。
os_tick_irqack:确认备用硬件定时器中断。
os_error:检测到运行时错误时调用。

超时值

超时值指定超时或时间延迟过去之前的计时器滴答数。该值是上限,取决于自上次计时器滴答以来经过的实际时间。

对于值1,系统等待直到下一个计时器滴答发生。这意味着实际超时值可以是小于指定超时值的一个计时器滴答。

CMSIS-RTOS功能概述-冯金伟博客园
计时器值

来自中断服务程序的调用

可以从线程和中断服务例程(ISR)调用以下CMSIS-RTOS函数:

osKernelRunning
osSignalSet
osSemaphoreRelease
osPoolAllocosPoolCAllocosPoolFree
osMessagePutosMessageGet
osMailAllocosMailCAllocosMailGetosMailPutosMailFree

无法从ISR调用的函数正在验证中断状态,并在从ISR上下文调用状态代码osErrorISR时返回在一些实现中,可以使用HARD FAULT向量捕获该条件。

一些CMSIS-RTOS实现同时支持来自多个ISR的CMSIS-RTOS函数调用。如果这是不可能的,CMSIS-RTOS拒绝嵌套ISR函数的调用,状态代码为osErrorISRRecursive