
操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载CMSISCommon Microcontroller Software Interface Standard通用微控制器软件接口标准是 ARM 为 Cortex 系列处理器制定的软硬件接口规范。本文以 RT-Thread 仓库bsp/ht32下 Holtek HT32 固件库FWLib中随包分发的 CMSIS README 为主线结合仓库内的实际头文件、构建脚本与板级配置说明 CMSIS Version 5 的组件构成、目录组织方式以及它在 RT-Thread HT32 BSP 的 SCons 构建体系与 Cortex-M0/M3 启动流程中承担的角色。读完本文你将掌握如何在该仓库中定位 CMSIS 核心头文件、理解设备头文件与core_cm*.h的包含关系并能在自己的 HT32 工程中正确配置 CMSIS 相关宏与头文件路径。一、CMSIS Version 5 是什么按仓库内 README 的定义CMSIS 是 ARM 发布的 Cortex-M/A 处理器及外设的统一软件接口标准。它位于硬件与应用程序之间提供标准化的处理器核心与外设访问 API面向 Cortex-M4/M7/M33/M35P 的 SIMD单指令多数据内建函数可跨编译器ARMCC、armclang、GCC、IAR移植的编译抽象层。该 README 说明其master分支对应 CMSIS Version 5 的正式发布线develop分支则反映持续开发状态。仓库内这份 README 与其携带的 ARM.CMSIS.pdsc 包描述文件共同表明当前随 HT32 FWLib 分发的是 CMSIS 5.9.0 版本2022-05-02 发布其中 CMSIS-Core(M) 为 5.6.0、CMSIS-DSP 为 1.10.0、CMSIS-NN 为 3.1.0、CMSIS-RTOS2 为 2.1.3、CMSIS-SVD 为 1.3.9、CMSIS-DAP 为 2.1.1。二、CMSIS 5 组件全景一份标准该管什么README 中的组件总表列出了一整套面向 Cortex 生态的接口规范各组件分工明确CMSIS 组件目标处理器职责Core(M)全部 Cortex-M、SecurCoreCortex-M 处理器核心与外设的标准 API含 M4/M7/M33/M35P 的 SIMD 内建函数Core(A)Cortex-A5/A7/A9Cortex-A 系列核心与外设的 API 及基础运行环境Driver全部 Cortex-M、SecurCore面向中间件通信协议栈、文件系统、GUI 等的通用外设驱动接口DSP全部 Cortex-M超过 60 个 DSP 库函数支持定点q7/q15/q31与单精度浮点32-bit并为 M4/M7/M33/M35P 提供 SIMD 优化实现NN全部 Cortex-M面向 Cortex-M 的神经网络内核集合在性能和内存占用上做了专门优化RTOS v1Cortex-M0/M0/M3/M4/M7通用 RTOS API 及基于 RTX 的参考实现使软件组件可跨多种 RTOS 运行RTOS v2全部 Cortex-M、Cortex-A5/A7/A9在 v1 基础上扩展 Armv8-M 支持、动态对象创建、多核系统支撑与二进制兼容接口Pack全部 Cortex-M、SecurCore、Cortex-A5/A7/A9软件组件、器件参数与评估板支持的交付机制简化软件复用与产品生命周期管理PLMBuild全部 Cortex-M、SecurCore、Cortex-A5/A7/A9提升生产力的工具、软件框架与工作流如 CI 支持已被 CMSIS-Toolbox 取代SVD全部 Cortex-M、SecurCore器件外设描述可用于调试器外设感知或生成 CMSIS-Core 头文件DAP全部 Cortex调试单元固件对接 CoreSight Debug Access PortZone全部 Cortex-M描述系统资源并将其划分到多个工程与执行区域的方法对嵌入式开发者而言日常使用频率最高的是Core(M)处理器寄存器与内建函数和Driver外设接口抽象而DSP / NN / RTOS v2则对应信号处理、端侧 AI 与 RTOS 移植等进阶场景。三、仓库内 CMSIS 的实际目录布局两种 FWLib 双线分发在 RT-Thread 的bsp/ht32下CMSIS 头文件并非单一存放而是跟随 Holtek 官方固件库按芯片系列分别存放5 系列Cortex-M0bsp/ht32/libraries/HT32_STD_5xxxx_FWLib/library/CMSIS1 系列Cortex-M3bsp/ht32/libraries/HT32_STD_1xxxx_FWLib/library/CMSIS以 5 系列为例其 CMSIS 目录包含三部分Include/精简发布集仅有cmsis_armcc.h、cmsis_armclang.h、cmsis_compiler.h、cmsis_gcc.h、cmsis_iccarm.h、cmsis_version.h、core_cm0plus.h、core_cm3.h、mpu_armv7.h。这正好覆盖 HT32F5 系列实际使用的 Cortex-M0core_cm0plus.h以及兼容编译所需的工具链抽象层。Core/Include/完整的 CMSIS-Core(M) 发布集包含全部核心头文件——core_cm0.h、core_cm0plus.h、core_cm1.h、core_cm3.h、core_cm4.h、core_cm7.h、core_cm23.h、core_cm33.h、core_cm35p.h、core_cm55.h、core_cm85.h、core_sc000.h、core_sc300.h、core_starmc1.h以及core_armv81mml.h、core_armv8mbl.h、core_armv8mml.h等 Armv8-M 变体此外还有cachel1_armv7.hL1 Cache API、mpu_armv7.h/mpu_armv8.hMPU API、pac_armv81.hPointer Authentication、pmu_armv8.h、tz_context.hTrustZone 上下文。Core/Template/ARMv8-M/main_s.c与tz_context.c两个安全态模板源文件供 Armv8-M 安全扩展项目参考。这样的“精简 Include 完整 Core/Include”双份结构兼顾了“开箱即用的最小依赖”与“面向全系 Cortex-M 的完整源码”与 README 所述“CMSIS/Core 为发布用文件、CoreValidation 不参与发布”的分层思想一致。四、CMSIS 在 RT-Thread HT32 BSP 中的真实调用链CMSIS 不是孤立存放的静态文件它通过设备头文件与 RT-Thread 的 SCons 构建脚本被实际编译进工程。以下是仓库内的证据链4.1 设备头文件对 core 头文件的引用HT32F5 系列设备头文件 ht32f5xxxx_01.h 在寄存器定义之后直接包含#include core_cm0plus.h /* Cortex-M0 processor and core peripherals */而 HT32F1 系列设备头文件 ht32f1xxxx_01.h 则包含#include core_cm3.h /* Cortex-M3 processor and core peripherals */这一包含关系说明设备头文件只负责外设寄存器布局ht32f5xxxx_01.h等而处理器核心寄存器NVIC、SysTick、SCB 等的访问统一交由 CMSIS 的core_cm*.h完成这正是 CMSIS “标准接口 厂商扩展”分层设计的落地体现。4.2 SCons 构建脚本把头文件路径接入编译bsp/ht32/libraries/HT32_STD_5xxxx_FWLib/SConscript 中path列表明确加入了三个头文件目录path [ cwd /library/HT32F5xxxx_Driver/inc, cwd /library/CMSIS/Include, cwd /library/Device/Holtek/HT32F5xxxx/Include ]这意味着使用 RT-Thread 的 SCons 构建时core_cm0plus.h、cmsis_gcc.h等 CMSIS 头文件会自动进入编译器搜索路径1 系列固件库的 SConscript 同样将library/CMSIS/Include加入CPPPATH。同一脚本还依据 Kconfig 选中的SOC_xxx符号通过get_source()从Source_file配置中挑选对应的system_ht32f5xxxx_xx.c系统初始化源文件与驱动源文件从而做到“选芯片即自动配 CMSIS 系统文件”。4.3 内核选择与启动文件的联动在 bsp/ht32/ht32f52352/board/Kconfig 中芯片内核通过CORTEX_M0/CORTEX_M3选项选择并据此select SOC_SERIES_HT32F5或SOC_SERIES_HT32F1。板级 SConscript 再根据rtconfig.CROSS_TOOL选择对应启动文件gccSource/GCC/startup_ht32f5xxxx_gcc_01.skeilSource/ARM/startup_ht32f5xxxx_01.siarSource/IAR/startup_ht32f5xxxx_iar_01.s启动文件完成向量表、堆栈初始化后跳转到SystemInit()定义于system_ht32f5xxxx_xx.c再进入 RT-Thread 的entry。这条链路表明 CMSIS 提供的SystemInit、core_cm*.h与启动汇编一起构成了 HT32 BSP 复位后的最小运行环境。4.4 版本号的源码依据bsp/ht32/libraries/HT32_STD_5xxxx_FWLib/library/CMSIS/Include/cmsis_version.h 中定义了 CMSIS-Core(M) 的版本宏#define __CM_CMSIS_VERSION_MAIN ( 5U) /*! [31:16] CMSIS Core(M) main version */ #define __CM_CMSIS_VERSION_SUB ( 6U) /*! [15:0] CMSIS Core(M) sub version */即当前 CMSIS-Core(M) 为5.6.0与ARM.CMSIS.pdsc中 5.9.0 发布说明CMSIS-Core(M): 5.6.0一致。同时core_cm3.h的version V5.1.2、core_cm0plus.h的version V5.0.9、cmsis_gcc.h的version V5.4.1等头文件级版本标注也随包可见方便开发者在排查编译问题时核对具体头文件版本。五、CMSIS 目录结构约定README 对照README 给出了 CMSIS 5 源码仓的标准目录布局仓库内 FWLib 的library/CMSIS正是按其中Core子集精简而来目录内容CMSIS/CoreCMSIS-Core(M) 相关文件发布用CMSIS/Core_ACMSIS-Core(A) 相关文件发布用CMSIS/CoreValidationCore(M)/Core(A) 验证套件不随发布CMSIS/DAPCMSIS-DAP 相关文件与示例CMSIS/DriverCMSIS-Driver API 头文件与模板CMSIS/DSPCMSIS-DSP 相关文件CMSIS/NNCMSIS-NN 相关文件CMSIS/RTOSRTOS v1 相关文件面向 Cortex-MCMSIS/RTOS2RTOS v2 相关文件面向 Cortex-M 与 Armv8-MCMSIS/PackCMSIS-Pack 示例与教程CMSIS/DoxyGen文档源文件CMSIS/Utilities工具程序在 bsp/ht32/libraries/HT32_STD_5xxxx_FWLib/library/CMSIS/Core/Include 中可以看到这些目录约定的直接对应物Core/Include即CMSIS/Core的头文件部分Core/Template/ARMv8-M即安全扩展模板。理解这套命名规范有助于你快速在任何 CMSIS 5 工程中定位“核心寄存器定义”“编译器适配层”“MPU/Cache/TrustZone 扩展”等文件。六、编译器抽象层一份代码四套工具链CMSIS 5 的移植性核心在于编译器适配头文件。仓库Include/与Core/Include/中成对出现的四个文件分别面向主流工具链cmsis_armcc.hArm Compiler 5ARMCC / Keil MDKcmsis_armclang.hArm Compiler 6armclang / Keil MDK AC6另有cmsis_armclang_ltm.h用于链接时多义LTM场景cmsis_gcc.hGNU GCCRT-Thread 的rtconfig.py默认CROSS_TOOL gcc时即走此路径cmsis_iccarm.hIAR Embedded Workbench它们通过cmsis_compiler.h统一派发cmsis_compiler.h根据__ARMCC_VERSION、__clang__、__GNUC__、__ICCARM__等编译器宏自动选择对应实现并定义统一的__STATIC_INLINE、__ASM、__attribute__等抽象宏。正因如此同一份core_cm0plus.h才能在 RT-Thread 的 GCC 构建、Keil 工程project.uvprojx与 IAR 工程template.ewp系列中无差别编译。值得一提的是cmsis_gcc.h等文件头部带有#pragma system_header/#pragma system_include类声明对应 clang/IAR 路径使 CMSIS 头文件在 MISRA 检查与编译告警中被视为系统头文件从而降低第三方代码带来的告警噪音。七、CMSIS 5 的关键增强与演进方向README 中列出的“已实现增强”包括提供 Windows/Linux 均可用的CMSIS-Pack 生成 shell 脚本模板支持通过 Eclipse 菜单Window - Preferences - CMSIS Packs - Manage Local Repositories与 Keil MDK 的 Pack 安装界面进行CMSIS-Pack 的 Git 工作流管理CMSIS-Zone 1.0 发布支持多处理器、TrustZone 与 MPU 配置支持Armv8.1-M 架构与 Cortex-M552020 年 3 月发布CMSIS-DSP 全面移植到 SIMD面向 Cortex-M 家族Armv8.1-M以及带 NEON 的 Cortex-A/Cortex-R且保持 API 兼容。“进一步规划”则集中在 CMSIS-Pack 的SDF 系统描述格式描述比 Debug Description 更复杂的调试拓扑、CPDSC 工程文件格式IDE 无关的工程模板与CMSIS-Build 命令行构建系统面向 CI 测试上。仓库内ARM.CMSIS.pdsc中 5.9.0 的发布说明还补充了本包携带的更新Cortex-M85 与 Arm China STAR-MC1 内核支持、CMSIS-NN 3.1.0 的 int16 卷积/池化与 int8 膨胀卷积优化、CMSIS-DSP 1.10.0 等说明这份随 HT32 FWLib 分发的 CMSIS 已涵盖到较新的 Arm 内核特性core_cm85.h、core_starmc1.h的存在即为佐证。八、生成文档与打包发布README 操作指南README 说明CMSIS 5 的 GitHub 开发仓不预置 RTOS/RTOS2 的预编译库要生成完整软件包需要自备构建环境。打包发布所需工具及版本如下工具版本用途doxygen.exe1.8.6文档生成器mscgen.exe0.20消息时序图转换器7z.exe7-Zip16.02文件归档在 Windows PC 上可据此生成两类产物CMSIS 文档运行./CMSIS/Doxygen下的批处理脚本gen_doc.shCMSIS 软件包运行./CMSIS/Utilities下的批处理脚本gen_pack.sh该脚本不生成文档且仓库内不包含 RTX4/RTX5 预编译库。此外./CMSIS/DoxyGen/How2Doc.txt描述了创建 API 文档的书写规则适合需要为自有库编写 Doxygen 注释的开发者参考。对大多数使用 RT-Thread HT32 BSP 的开发者而言本仓库已经以源码形式打包好了 CMSIS 头文件无需重复执行打包流程直接用 SCons 或 Keil/IAR 工程编译即可。九、许可协议与贡献约定CMSIS 采用Apache License 2.0许可仓库内 LICENSE.txt 同步携带。README 明确贡献代码同样在 Apache 2.0 下被接受且只接受全部由你本人编写的代码提交。issue 管理约定了一整套标签语义用于让社区反馈可被高效分类处理bug确认的缺陷将进行调查wontfix认可但不改动现有行为enhancement即将实现的新特性future尚未排期的内容out-of-scope与 CMSIS 关联较弱、可能在 CMSIS 之外实现question需要进一步澄清的问题documentation文档缺陷后续改进review评审中请耐心等待DONE已解决请复核并关闭duplicate已在他处处理见评论中的引用Important Information关于重大增强的关键信息。十、在 RT-Thread 工程中使用 CMSIS 的实用要点结合仓库实际情况归纳几条可直接落地的经验不要手动复制 CMSIS 头文件bsp/ht32/libraries/HT32_STD_5xxxx_FWLib/library/CMSIS/Include已由 固件库 SConscript 加入编译路径Keil/IAR 工程project.uvprojx、template.ewp同样引用此目录新增工程时保持该 include 路径即可。核对__CORTEX_M宏core_cm3.h中__CORTEX_M (3U)、core_cm0plus.h中对应的 0/0 定义由设备头文件或工程宏决定编译时需确保与所选芯片一致否则可能触发断言或错误的寄存器访问。版本可追溯通过cmsis_version.h的__CM_CMSIS_VERSION与各头文件version注释核对 CMSIS-Core(M) 版本本仓库为 5.6.0遇到编译器报错可先确认工具链适配头文件cmsis_gcc.h等是否被正确选中。启动链路完整闭环复位后执行顺序为 启动汇编 →SystemInit()system_ht32f5xxxx_xx.c→ RT-Thread 入口。若修改了时钟配置优先检查system_ht32f5xxxx_xx.c中与Source_file选择对应的系统初始化函数。总之这份随 HT32 FWLib 分发的 CMSIS Version 5 是连接 Holtek 外设寄存器与 RT-Thread 内核、驱动框架之间的标准化桥梁。理解它的组件划分、目录约定与构建接入方式是高效开发 HT32 系列 BSP 工程的第一步也是阅读bsp/ht32下三个评估板工程ht32f12366、ht32f52352、ht32f53252源码的基础。赞分享操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载相关推荐RT-Thread BSP 实战APM32E103ZE Tiny 开发板快速上手与源码级外设解析RT Thread BSP 实战APM32E103ZE Tiny 开发板快速上手与源码级外设解析 APM32E103ZE Tiny BOARD 是极海半导体操作系统嵌入式物联网嵌入式OSRTOSMAS 微软激活脚本实战4种 Windows/Office 激活方式速配 完整选型指南MAS 微软激活脚本实战4种 Windows/Office 激活方式速配 完整选型指南 系统水印一直在又不敢乱下来路不明的激活工具开源项目 MAS微操作系统嵌入式物联网嵌入式OSRTOSRT-Thread PSoC 6 BSP 发行说明深度解读CY8CPROTO-062S3-4343W 硬件资源、版本演进与源码剖析RT Thread PSoC 6 BSP 发行说明深度解读CY8CPROTO 062S3 4343W 硬件资源、版本演进与源码剖析 本文以 bsp/Infin操作系统嵌入式物联网嵌入式OSRTOS上一篇SAR舰船检测数据集SSDD从下载到跑通只需 3 步下一篇如何把优酷、B站等7个平台的视频离线保存到本地Video-Downloader 实操指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考