原文链接:CMSIS: Introduction
CMSIS 简介
CMSIS(通用微控制器软件接口标准)是一套 API、软件组件、工具和工作流,旨在:
-
简化软件重用;
-
降低微控制器开发者的学习门槛;
-
加快项目构建与调试速度;
-
缩短新应用的上市周期。
CMSIS 起初是基于 Arm® Cortex®-M 的通用硬件抽象层,后来扩展支持入门级的 Cortex-A 处理器。它通过定义通用工具接口并提供简洁的软件接口,简化了对处理器和外设的访问。
CMSIS 致力于推动行业标准化。在各种开发工具和微控制器平台之间提供一致的软件层和设备支持,不会引入大的软件开销,也不定义标准外设,因此芯片厂商可以灵活支持各种 Arm Cortex 设备。
CMSIS 组件
基础组件(Arm::CMSIS)
-
为设备的基本功能提供软件抽象;
-
同一 GitHub 仓库维护,打包为
Arm::CMSIS
:
组件 | 描述 |
---|---|
CMSIS-Core | Cortex 处理器标准化访问接口 |
CMSIS-Driver | 中间件通用外设驱动接口 |
CMSIS-RTOS2 | 实时操作系统通用 API |
扩展组件(独立 CMSIS-Pack)
组件 | 描述 |
---|---|
CMSIS-DSP | 嵌入式系统优化的计算函数 |
CMSIS-NN | 高效神经网络内核 |
CMSIS-View | 事件记录器和组件可视化技术 |
CMSIS-Compiler | 标准 C 库 IO 重定向工具 |
工具(独立维护)
工具 | 描述 |
---|---|
CMSIS-Toolbox | CMSIS 软件包处理命令行工具 |
CMSIS-Stream | 优化 DSP/ML 数据流的工具与方法 |
CMSIS-DAP | CoreSight 调试访问端口的调试单元固件 |
CMSIS-Zone | 系统资源描述与分区配置工具 |
规范
规范 | 描述 |
---|---|
CMSIS-Pack | 软件与设备/板支持交付机制 |
CMSIS-SVD | 用于调试视图的外设描述格式 |
CMSIS 的优势
-
降低开发门槛与成本,加快上市时间;
-
一致的软件接口提升代码可移植性与可复用性;
-
提供调试连接、外设视图、软件交付和设备支持接口;
-
编译器无关,主流编译器均可支持;
-
增强调试功能:支持 ITM printf 输出、外设信息查看;
-
使用 CMSIS-Pack 格式简化分发与更新;
-
CMSIS-Zone 简化多核、内存区和外设的系统分区配置;
-
CMSIS-Toolbox 支持 CMake 和集成开发环境(如 VS Code);
开发模式
CMSIS 与多家芯片和软件厂商合作开发,致力于为外设、RTOS、中间件提供统一接口,支持跨厂商组件组合开发。
CMSIS 是开源协作开发,基础仓库托管在:github.com/Arm-software/CMSIS_6。
编码规则
-
遵循 ANSI C(C99)与 C++(C++03)标准;
-
使用
<stdint.h>
中定义的数据类型; -
#define
表达式使用括号; -
遵循 MISRA C:2012,但不强制符合,偏差会记录;
-
标识符建议:
-
全大写用于核心/外设寄存器、指令;
-
驼峰命名用于函数和中断;
-
使用命名空间前缀避免冲突;
-
注释格式符合 Doxygen 要求,如:
/**
* @brief 在 NVIC 控制器中使能中断
* @param IRQn 中断号
* @return 无
*/
验证
CMSIS 组件使用 Arm Compiler 6(基于 LLVM)和 GCC 验证。与 C/C++ 标准兼容,符合 Arm ABI。
部分组件拥有专用测试集(如 CMSIS-Driver 和 CMSIS-RTOS2)。CMSIS C 代码尽力符合 MISRA C:2012,但未强制执行,C++ 不做检查以避免与 C 冲突。
从 CMSIS v5 迁移
CMSIS v6 主要功能与 v5.9.0 相同,但结构和命名可能有所不同。建议阅读:
注意:v6.0.0 中 Cortex-M 的头文件有不兼容变化,请查阅修订历史。
许可证
CMSIS 遵循 Apache 2.0 License,由 Arm 免费提供。