CMSIS-RTOS 是实时操作系统的通用 API。它提供了标准化的编程接口,可移植到很多
RTOS,使软件模板、中间件、库及其它组件能工作于支持的 RTOS 系统。
此模块由cmsis_os.c/h文件表示,位于“Middlewares\Third_Party\FreeRTOS\CMSIS_RTOS”
下。典型的 CMSIS-RTOS API 实现与已有实时内核连接。 CMSIS-RTOS API 提供了下列属性和
功能:
• 函数名、标识符、参数都容易理解。函数功能强大灵活,减少了暴露给用户的函数数目。
• 线程管理可定义、创建、控制线程。
• 中断服务程序(ISR)可调用很多 CMSIS-RTOS 函数。当无法从 ISR 调用 CMSIS-RTOS
函数时,函数会拒绝该调用。
• 有三种不同的线程事件类型,可支持多线程和 / 或 ISR 间的通信:
– 信号:该标志可用于向线程发出特定状态的信号。可在 ISR 中修改信号,或从其它
线程设置。
– 消息:为 32 位的值,可被发送到线程或 ISR。消息缓存于队列中。消息类型和队列
大小定义于描述符中。
– 邮件:为固定大小的内存块,可被发送到线程或 ISR。邮件缓存于队列中,提供有
内存分配。邮件类型和队列大小定义于描述符中。
• 包括了互斥量管理和信号量管理。
• CPU 时间可用
• 下列功能调度:
– 超时参数包含在很多 CMSIS-RTOS 函数中,以避免系统死锁。当指定了超时参数
时,系统会等待,直到有资源可用或事件发生。当等待时,可调度其它线程。
– osDelay函数会将线程置于 WAITING 状态一段特定时间。
– 通用的 osWait 函数会等待指定到线程的事件。
– osThreadYield 提供了合作式的线程切换,将执行传递给相同优先级的另一个线程。
CMSIS-RTOS API 设计为可选择地包括多处理器系统和 / 或通过 Cortex-M 存储器保护单元
(MPU)进行访问保护。
在一些 RTOS 实现中,线程可能在不同的处理器上执行,因此邮件和消息队列可存在于共享
的存储器资源中。
CMSIS-RTOS API 鼓励软件业界发展现有的 RTOS 实现。使用宏定义与访问内核对象。这可
实现差异化。RTOS 实现可针对 Cortex-M 处理器,在各方面差异化并优化。例如,可选的特
性可为:
• 通用 Wait 函数,即,支持时间周期。
• 支持 Cortex-M 存储器保护单元 (MPU)。
• 零复制邮件队列。
• 支持多处理器系统。
• 支持 DMA 控制器。
• 确定性上下文切换。
• 循环调度上下文切换。
• 死锁避免,例如反转优先级。
• 通过使用 Cortex-M3/M4 指令 LDEX 和 STEX,实现零中断延迟。
|