STM32Cube通过Clang/LLVM支持进一步简化代码开发
友友们,ST 最新放出的ST Arm Clang/LLVM 工具链绝对是 Cube 生态的大升级,社区经理 Maxime_MARCHETTO 已经详细爆料了这个新工具链的细节,目标就是让咱们开发效率直接拉满,体验更现代的开发流程~
工具链核心亮点速览
- 架构大升级:基于 LLVM 和 Arm 嵌入式工具链深度定制,专门针对 STM32 优化过,实测代码密度和执行速度都有惊喜!
- 两种版本任你选:
- 混合工具链:Clang 编译器 + GNU 链接器 / 库,从 GCC 迁移过来的兄弟直接无缝衔接,不用改太多配置
- 完整 LLVM 工具链:全套 Clang+LLVM 链接器 + Picolibc/Newlib 库,性能和代码尺寸双重优化,追求极致的选这个
- 生态整合超丝滑:STM32CubeMX 6.15 和 VS Code 插件直接支持,新建项目选工具链一步到位,迁移老项目也不费劲
- C 库灵活切换:需要性能就用 Newlib,想做代码精简选 Picolibc,不同项目需求都能满足
更多详细内容在本帖下方查看阅读~~
官方说会根据咱们的反馈继续优化性能、兼容性和生态整合,后续还会放更多示例项目和文档~
诚邀各位友友试用后分享体验: 1、工具链实际编译速度、生成代码效率怎么样? 2、从 GCC 迁移过来有没有遇到坑?兼容性如何? 3、和 Cube 生态的整合体验顺畅吗?配置麻烦不? 4、文档和教程够不够用?上手难度大不大? 5、特别是在低功耗、实时系统这些场景下,有没有什么特殊表现或改进建议?
活动时间:2025.8.13——2025.8.31
参与方式: 在本帖下方分享你的真实体验OR建议:用过的来楼下交流,还没试过的赶紧去官网扒细节~
活动奖励: 1、便携式示波器*5 2、20元打赏*10 3、10元打赏*15
奖励抽取标准:分享的内容丰富程度越高越容易中奖 1、基础信息:含试用版本、开发环境、项目类型等 2、核心评价维度:性能、兼容性、生态整合、易用性 3、建议与优先级:明确优化建议及实施优先级标注
Maxime 的完整分享里有更多干货!一起帮 ST 把工具链打磨得更顺手~
社区经理 2025-07-08 1:30 AM
Clang/LLVM工具链项目概述 十余年来,意法半导体一直提供STM32 GNU工具作为开发STM32应用的免费参考工具链。该工具链在整个STM32Cube生态系统中获得全面支持,并将持续获得来自意法半导体的维护更新。
Clang/LLVM工具链将逐步为STM32开发人员带来更优的代码密度和执行速度。本次发布是提升工具链性能与深化STM32Cube生态系统整合的第一步。该工具链将在STM32CubeMX和STM32Cube for Visual Studio Code中获得支持。
本次发布提供首个基于Arm LLVM源代码树构建的ST Arm Clang工具链版本。早期用户可以体验与当前GCC性能相当的工具链。该版本提供更完善的代码检查机制和更优化的C代码库,编译器基准测试数据将后续公布。
后续开发将分为两个步骤: - 收集反馈:早期用户将有机会分享使用体验,助力意法半导体优化工具链并确保其在STM32Cube生态系统中的集成水平符合预期。
- 工具链优化:我们将调整工具链以提升代码密度与执行速度。
采用分阶段推进策略,确保开发优先级与开发人员需求保持一致。ST Arm Clang版本将很快提供示例项目,同时STM32CubeMX和STM32Cube for Visual Studio Code将为STM32开发人员提供入门支持。
ST Arm Clang工具链特性
这套基于LLVM的新工具链在保持与现有项目的兼容性的同时,为开发人员提供更高效、灵活且面向未来的开发环境。
ST Arm Clang设计为STM32 GNU工具链的无缝替代方案,最大限度降低过渡过程中的干扰。但由于底层架构差异,可能存在少量不兼容性或不同特性。为简化过渡过程,我们提供两种版本的工具链: - 混合工具链:仅使用LLVM Clang编译器和集成汇编器通过编译代码生成目标文件(本地应用、HAL等)。最终二进制文件仍使用STM32现有GNU工具中的工具和库(GNU Binutils链接器、C/C++库及运行时)构建。该混合版本适合希望尝试Clang编译同时保留GNU链接和运行时环境的开发人员。用户需在系统中同时安装Clang与GCC工具链,此模式下不支持链接时优化 (LTO)。
- 完整LLVM工具链:提供基于LLVM的完整解决方案(Clang编译器、LLVM链接器及运行时),集成Picolibc或LLVM libc++等更新库。该版本融合LLVM社区以及Arm和意法半导体研发团队的成果,针对STM32器件优化支持、性能和代码尺寸。开发人员可根据项目优先级或器件资源选择工具链提供的两种C库实现:Newlib(性能优先)和Picolibc(侧重代码精简)。
STM32CubeMX支持 STM32CubeMX 6.15版本新增对ST Arm Clang的支持。具体而言,STM32CubeMX可为混合版本的ST Arm Clang工具链生成项目配置。这使得STM32开发人员能够快速将现有GCC项目迁移到ST Arm Clang工具链,无需重写链接脚本或考虑Newlib与Picolibc的兼容性问题。
选择CMake与ST Arm Clang组合将创建一个混合工具链项目: 如果用户希望从混合版本切换到完整LLVM版本,可参照下文说明在STM32Cube for Visual Studio Code中操作。
STM32Cube for Visual Studio Code 开发人员在STM32Cube生态系统内可通过两个方式启动项目: - 使用STM32CubeMX生成可配置项目
- 使用STM32Cube for Visual Studio Code生成空项目
本教程假设已按前章所述通过STM32CubeMX创建了一个项目。
STM32CubeMX项目导入与Visual Studio Code开发环境初始化介绍 在STM32Cube for Visual Studio Code中,打开包含使用STM32CubeMX生成的项目的文件夹。
选择STM32CubeMX项目生成路径。 允许STM32Cube for Visual Studio Code加载STM32扩展模块。系统将要求您配置项目和STM32Cube项目,然后选择“Yes”。 Visual Studio Code将读取项目元数据并检测是否已安装ST Arm Clang工具链。
如果是首次针对该新工具链创建项目,开发环境将自动下载、安装并为此项目激活该工具链。下载量约700 MB,安装占用2.5 GB。 Visual Studio Code环境不会全局配置为使用ST Arm Clang工具链。工具链选择和环境路径管理仅在Visual Studio Code内部本地进行,并且每个项目可独立配置。
项目构建与结果分析 ST Arm Clang安装完成后,系统将调用CMake执行项目配置步骤。 可在CMake/Build输出通道中查看新的ST Arm Clang工具链。 点击“Build”按钮编译项。
结果将显示在输出控制台。编译分析器可用于进一步了解编译结果。右键单击任意映射文件,选择Open memories analysis。
了解CMake文件结构与工具链选择机制 CMakePresets.json使用starm-clang.cmake文件作为CMake工具链文件。
若STM32CubeMX项目是针对GCC生成的,该文件将指向gcc-arm-none-eabi.cmake。STM32CubeMX 6.15 及后续版本会同时生成两个文件 gcc-arm-none-eabi.cmake和starm-clang.cmake,方便开发人员在IDE内切换工具链。这些文件一经生成便不再修改。 配套的starm-clang.cmake文件允许开发人员选择可供选择的C库组合。
默认情况下,选择ST Arm Clang工具链的混合版本,因其与现有STM32 GNU工具的兼容性最好。建议开发人员尝试使用此工具链进行代码编译与测试。如上所示,通过修改STARM_TOOLCHAIN_CONFIG变量值即可切换至依赖Newlib或Picolib的完整LLVM版本,这一过渡步骤有助于开发人员熟悉新版工具链。
STM32Cube for Visual Studio Code用户指南提供更多关于ST Arm Clang的文档,并将根据用户反馈持续补充资源。
|