CMSIS标准

CMSIS标准
THEDICMSIS
什么是CMSIS
CMSIS
全称是 Cortex Microcontroller Software Interface Standard,由ARM公司推出,是专门为ARM Cortex-M
、Cortex-A
、Cortex-R
微控制器系列设计的一套软件接口标准。
CMSIS 是 ARM Cortex 系列 MCU 软件开发的
标准基石
,让软件更易移植、更高效、更易用。我们使用的各种MCU:STM32、GD32、NXP等 Cortex-M 芯片,实际工程中总会用到 CMSIS 的头文件、API 或库。
核心作用
标准化底层驱动和外设访问接口
让不同芯片厂家(ST、NXP、GD、兆易创新等)的底层驱动代码
更加统一,便于移植和复用。提供统一的外设寄存器定义和访问方式
通过结构体/宏定义
等方式描述 Cortex-M内核
和外设寄存器
,让开发者用标准方式操作硬件,无需查找手册每个寄存器地址。支持RTOS和DSP库接口标准化
包含CMSIS-RTOS(RTOS抽象标准)、CMSIS-DSP(数字信号处理库)、CMSIS-NN(神经网络库)等。
主要内容
- CMSIS-Core
Cortex 系列内核寄存器、启动文件、系统初始化等的标准定义。 - CMSIS-Driver
标准化外设驱动接口(如I2C、SPI、USART等),方便中间件/库与硬件的解耦。 - CMSIS-RTOS
标准化实时操作系统(RTOS)API接口(V1、V2),方便应用/中间件跨RTOS运行。 - CMSIS-DSP
数字信号处理库,包含常用滤波、FFT、矩阵运算等优化算法。 - CMSIS-NN
针对 Cortex-M 优化的神经网络推理库。 - CMSIS-Pack
软件包描述标准,便于芯片厂商和IDE自动管理和集成驱动/库。
CMSIS-RTOS
什么是CMSIS-RTOS
CMSIS-RTOS(Cortex Microcontroller Software Interface Standard - Real-Time Operating System)是由ARM公司主导制定的、针对嵌入式微控制器的RTOS
(实时操作系统)抽象标准接口。
它是CMSIS
标准的一部分,旨在为各种 RTOS 提供统一的API,使得中间件、应用代码能够脱离对具体RTOS
的依赖,方便移植和复用。
核心作用
标准化接口:
- 各种RTOS(如FreeRTOS、uC/OS、ThreadX等)原生API不同,代码移植很麻烦。所以提供一套统一的、跨RTOS的API(任务(线程)管理、信号量、消息队列、定时器等),让应用代码、库代码都只依赖这套标准API,而不直接依赖某个具体RTOS。
- 换RTOS时,只需替换CMSIS-RTOS的底层适配实现,上层应用代码基本不用动。
增强中间件和组件移植性
- 像LVGL、网络协议栈、USB堆栈等通用软件包,只要适配CMSIS-RTOS接口,就可以跑在任何支持CMSIS-RTOS的系统上。
- ST、ARM等芯片厂商的中间件通常都支持CMSIS-RTOS接口,这样库代码可以在多种RTOS之间通用。
便于软件生态兼容:很多第三方库、协议栈、图形库(如 LVGL)都会优先支持 CMSIS-RTOS 接口,方便在不同平台快速集成。
主要内容
CMSIS-RTOS 主要包含以下方面的 API:
- 线程(Task)管理
- 信号量(Semaphore)、互斥量(Mutex)
- 消息队列(Message Queue)
- 事件标志组(Event Flags)
- 定时器(Timer)
- 内存池(Memory Pool)
- 系统定时与调度
版本
CMSIS-RTOS V1
:最早的标准,接口较为简单,兼容性好。CMSIS-RTOS V2
:支持更多高级功能(如线程属性、内存池、事件标志等),API更现代化,是推荐使用的新标准。
举例
以创建任务的接口函数为例
osThreadNew
和 xTaskCreate
都是用于创建任务(线程)的函数,但它们属于不同的接口和框架。
xTaskCreate
: 是 FreeRTOS 的原生 API 直接用于创建任务,属于 FreeRTOS 的核心函数。这是一个更低级的接口,直接与 FreeRTOS 的调度器交互。osThreadNew
: 是根据 CMSIS-RTOS API 规范定义的接口,目的是提供一个更高层次的、硬件无关的 RTOS 接口。CMSIS-RTOS API 可以被视为在 FreeRTOS原生API 之上提供了一层抽象
,使得代码更具可移植性。
什么是抽象?
抽象就是对复杂事物做简化,把共性提取出来,隐藏细节,类似于
封装功能,然后暴露接口
在软件开发中,抽象常表现为接口(API),比如函数声明、类、协议等。
比如:
- 硬件抽象层(HAL):STM32的HAL库就是对寄存器操作的抽象,上层不直接操作寄存器。
- RTOS抽象层(CMSIS-RTOS):对RTOS的任务、信号量等API做统一标准化,上层不直接调用FreeRTOS/RTX等原生API。
- 驱动抽象层:比如I2C、SPI等接口的标准驱动,不管底层硬件怎么实现。