介绍
CMSIS是一组工具、API、框架和工作流程,有助于简化软件重用、减少微控制器开发人员的学习曲线、加快项目构建和调试,从而缩短新应用程序的上市时间。
CMSIS 最初是一个独立于供应商的硬件抽象层基于 Arm® Cortex®-M 的处理器,后来扩展到支持基于 Arm Cortex-A 的入门级处理器。为了简化访问,CMSIS 定义了通用工具接口,并通过向处理器和外围设备提供简单的软件接口来实现一致的设备支持。
CMSIS 是与各种芯片和软件供应商密切合作定义的,它提供了一种通用方法来连接外围设备、实时操作系统和中间件组件。它旨在实现来自多个供应商的软件组件的组合。
CMSIS 是开源的,在GitHub 上协作开发。
CMSIS 组件
动机
CMSIS 的创建是为了帮助行业标准化。它在各种开发工具和微控制器中实现一致的软件层和设备支持。CMSIS 不是一个巨大的软件层,它会引入开销并且不定义标准外围设备。因此,硅行业可以使用此通用标准支持各种基于 Arm Cortex 处理器的设备。
CMSIS 结构
CMSIS 的好处是:
CMSIS 降低了学习曲线、开发成本和上市时间。开发人员可以通过各种易于使用的标准化软件接口更快地编写软件。
一致的软件接口提高了软件的可移植性和可重用性。通用软件库和接口提供一致的软件框架。
它提供用于调试连接、调试外设视图、软件交付和设备支持的接口,以缩短新微控制器部署的上市时间。
它允许使用您选择的编译器,因为它独立于编译器,因此受到主流编译器的支持。
它通过调试器的外围信息和用于 printf 样式输出的 ITM 通道增强了程序调试。
CMSIS 以 CMSIS-Pack 格式交付,可实现快速软件交付、简化更新并实现与开发工具的一致集成。
CMSIS-Zone 将简化系统资源和分区,因为它管理多个处理器、内存区域和外围设备的配置。
持续集成是当今大多数软件开发人员的常见做法。CMSIS-Build 支持这些工作流程并使持续测试和验证更容易。
编码规则
CMSIS 使用以下基本编码规则和约定:
符合 ANSI C (C99) 和 C++ (C++03)。 使用中定义的 ANSI C 标准数据类型。 变量和参数具有完整的数据类型。 常量表达式#define用括号括起来。 符合 MISRA 2012(但未声称符合 MISRA)。记录 MISRA 规则违规行为。
此外,CMSIS 推荐以下标识符约定:
用于标识核心寄存器、外设寄存器和 CPU 指令的大写名称。 CamelCase名称来标识函数名称和中断函数。 命名空间_前缀避免与用户标识符冲突并提供功能组(即,用于外围设备、RTOS 或 DSP 库)。
CMSIS 记录在源文件中,其中包括:
使用 C 或 C++ 样式的注释。 符合Doxygen的函数注释提供: 简要功能概述。 功能的详细描述。 详细的参数说明。 有关返回值的详细信息。
Doxygen 评论示例:
验证
CMSIS 的各种组件都使用主流编译器进行了验证。为了获得多样化的覆盖范围,在各种测试中使用了 Arm Compiler v5(基于 EDG 前端)、Arm Compiler v6(基于 LLVM 前端)和 GCC。对于每个组件,“验证”部分描述了各种验证步骤的范围。
CMSIS 组件与一系列 C 和 C++ 语言标准兼容。CMSIS 组件符合Arm 架构的应用程序二进制接口 (ABI)(CMSIS-RTOS v1 除外)。这确保了支持各种工具链之间互操作的 C API 接口。
由于 CMSIS 定义了可扩展到各种处理器和设备的 API 接口和函数,因此运行时测试覆盖的范围是有限的。但是,使用专用测试套件( CMSIS-Driver、CMSIS-RTOS v1和CMSIS-RTOS v2 )验证了几个组件。
使用 PC-Lint 检查 CMSIS 源代码是否符合 MISRA C:2012。MISRA 偏差已通过合理努力记录在案,但 Arm 并未声称符合 MISRA,例如目前没有指南执行计划。不检查 CMSIS 源代码是否符合 MISRA C++:2008,因为它存在与 C 语言标准不兼容的风险,特别是可能由各种 C 编译器生成的警告。
执照
CMSIS 由 Arm 根据Apache 2.0 许可证免费提供。
CMSIS 软件包
CMSIS 本身以CMSIS-Pack格式交付。ARM::CMSIS包包含以下内容:
CMSIS 目录
|