当前位置: 首页 > news >正文

Arm Compiler for Embedded 6.22 新特性与嵌入式开发指南

1. Arm Compiler for Embedded 6.22 版本概览

Arm Compiler for Embedded 6.22 是 Arm 公司于 2024 年 3 月 19 日发布的嵌入式 C/C++ 编译工具链的最新版本。作为专为裸机软件、固件和实时操作系统(RTOS)应用开发设计的高级工具链,它延续了 Arm 在嵌入式开发工具领域的领先地位。

这个版本最值得注意的特点是它并未通过安全相关开发的认证。如果你的项目涉及功能安全要求(如 EN 50128、IEC 61508、IEC 62304 或 ISO 26262 等标准),或者使用 Automotive Enhanced 处理器,Arm 强烈建议考虑使用 Arm Compiler for Embedded FuSa 的 LTS(长期支持)和认证版本。

1.1 产品定位与技术特点

Arm Compiler for Embedded 是 Arm 架构下最先进的嵌入式编译工具链,具有以下核心优势:

  • 架构支持全面性:提供对最新 Arm 架构特性和扩展的最早、最完整和最准确支持
  • 处理器兼容性广:支持所有最新的 Arm 处理器,包括尚在开发中的型号
  • 优化能力强大:通过先进的优化技术和优化库,帮助开发者满足苛刻的性能目标和内存限制

工具链与主流 Arm 集成开发环境(IDE)完美兼容,包括:

  • Arm Development Studio
  • Keil MDK 版本 5
  • Keil MDK 版本 6

1.2 主要更新内容

6.22 版本带来了多项重要更新:

  1. 架构支持扩展

    • 新增 Armv9.5-A 架构支持
    • 增加对 A-profile 架构 2023 年扩展的支持
    • 支持 Armv8-R AArch64 无硬件浮点支持的实现
  2. 处理器支持新增

    • Neoverse V3AE
    • Cortex-A720AE
    • Cortex-A520AE
    • Cortex-R82AE
    • Cortex-M52
  3. 编译功能增强

    • 新增#pragma message <message>预处理指令支持
    • 增加-fstack-usage编译器选项生成堆栈使用信息文件
    • 改进operator new的内存分配失败处理行为

1.3 组件构成

Arm Compiler for Embedded 6.22 包含以下核心组件:

工具链组件

  • armclang:基于 LLVM 和 Clang 技术的编译器和集成汇编器
  • armar:用于收集 ELF 目标文件的归档器
  • armlink:链接器,组合对象和库生成可执行文件
  • fromelf:镜像转换工具和反汇编器
  • armasm:仅用于旧版 Arm 架构的遗留汇编器(新项目建议使用 armclang 集成汇编器)

运行时库

  • Arm C 库:嵌入式系统的运行时支持库
  • Arm C++ 库:基于 LLVM libc++ 项目的库

文档资源

  • 用户指南
  • 参考指南
  • Arm C 和 C++ 库及浮点支持用户指南
  • 错误和警告参考指南
  • 迁移和兼容性指南
  • 发布说明

2. 版本差异与重要变更

2.1 与前版本的显著区别

6.22 版本相比前代 6.21 版本有几个关键改进:

  1. 浮点支持扩展

    • 新增对 Armv8-R AArch64 无硬件浮点支持的目标配置选项
    • 针对 Cortex-R82AE、Cortex-R82 等处理器提供了专门的编译选项组合
  2. A-profile 架构特性支持

    • 多项 A-profile 架构特性支持级别从 Alpha/Beta 升级为正式支持
    • 包括 FEAT_CPA、FEAT_FP8、FEAT_SME_F8F16 等重要特性
  3. 安全相关改进

    • 修复了多项与分支保护(BTI、PAC)相关的代码生成问题
    • 改进了指针认证和返回地址签名相关的编译器行为

2.2 关键修复内容

编译器(armclang)修复

  1. SVE 指令集支持相关:

    • 修复了 32 位元素 FMMLA 指令的错误检测问题
    • 修正了 SVE2 目标下可能出现的"error in backend"错误
  2. MVE 相关修复:

    • 解决了 MVE-I 仅支持整数时的代码生成问题
    • 修复了多个 MVE 内部函数(vgetq_lane_, vmovl等)的代码生成错误
  3. 其他重要修复:

    • 修正了 AArch64 大端目标下的浮点类型代码生成问题
    • 解决了与 setjmp/longjmp 相关的分支保护问题
    • 修复了 Neon 内部函数(vld2q_dup_*系列)在 AArch32 下的错误

链接器(armlink)修复

  • 修正了处理包含 A 或 T 类型符号的 symdefs 文件时的警告问题
  • 解决了 LTO 链接时可能出现的符号保留错误

库和系统头文件修复

  • 修正了 math_errhandling 常量的定义
  • 修复了多个 Neon 内部函数的返回类型定义
  • 改进了无硬件浮点支持目标下的双精度除法精度
  • 优化了 setjmp/longjmp 在 Shadow Call Stack 下的行为

3. 使用建议与注意事项

3.1 版本选择考量

虽然 6.22 版本提供了许多新特性,但需要注意:

  1. 非安全认证:此版本未通过功能安全认证,不适合安全关键型项目开发。

  2. 遗留状态:该版本已被后续版本取代,成为遗留版本。对于新项目,建议考虑使用更新的版本。

  3. 长期维护:如果项目有长期维护需求,建议使用 FuSa 版本的 LTS 发布系列。

3.2 新特性使用建议

  1. Armv9.5-A 架构支持

    • 使用-march=armv9.5-a选项启用
    • 注意 AArch32 状态下的支持是新加入的
  2. 新增处理器支持

    • Cortex-M52 提供了多种配置组合:
      # 完整功能支持 -mcpu=cortex-m52 # 无 MVE 支持 -mcpu=cortex-m52+nomve # 无 PACBTI 扩展 -mcpu=cortex-m52+nopacbti
  3. 无硬件浮点的 Armv8-R AArch64

    • 需要特殊配置:
      --target=aarch64-arm-none-eabi -mcpu=cortex-r82+nofp -mabi=aapcs-soft
    • 链接器需配合--cpu=8-R.64 --fpu=SoftVFP选项

3.3 已知问题与规避方案

  1. 浮点模式问题

    • 使用-ffp-mode=full时,包含_Float16类型变量的程序可能生成错误代码
    • 临时解决方案:避免在此模式下使用_Float16类型
  2. C++标准支持

    • 注意 C++98 和 C++03 标准将在未来版本中被移除支持
    • 建议逐步迁移到更新的 C++标准
  3. 加密扩展默认值

    • 某些处理器的加密扩展特性不再默认启用
    • 需要显式指定如+crypto,+sve2-aes等特性修饰符

4. 安装与系统要求

4.1 下载与获取

Arm Compiler for Embedded 6.22 可通过以下方式获取:

  1. 独立下载

    • 使用 Arm Product Download Hub (PDH) 中的 ACOMPE 产品代码
    • 提供针对不同主机平台的安装包
  2. 集成开发环境包含

    • Arm Development Studio
    • Keil MDK 5
    • Keil Studio for VS Code

4.2 系统要求

支持的主机平台

主机架构操作系统环境
x86_64RHEL 9/8/7, Ubuntu 22.04/20.04独立安装或 Arm Development Studio
x86_64Windows Server 2022/2019, Windows 11/10独立安装或集成到开发环境
AArch64Ubuntu 20.04 LTS仅限独立安装

重要限制

  • 不支持 x86_32 Windows 主机平台
  • Linux 主机平台最低需要 glibc 2.15
  • 禁止直接安装到 Arm Development Studio 安装目录
  • Keil MDK 5 授权仅限 x86_64 Windows 平台使用

5. 迁移与兼容性

5.1 从旧版本迁移

  1. 加密扩展变更

    • Cortex-X4、Cortex-A720 等处理器的加密扩展不再默认启用
    • 需要显式添加+crypto等特性修饰符
  2. operator new 行为变更

    • 无异常模式下内存分配失败时行为变化
    • 现在会打印错误信息并引发 SIGABRT
    • 如需旧行为,需修改代码使用nothrow版本
  3. 检查校验和算法变更

    • 安装目录中的 checksums.txt 改用 SHA256 算法
    • 相关校验工具需要相应更新

5.2 长期兼容性规划

  1. C++标准支持

    • C++98 和 C++03 将在未来版本中移除
    • 相关编译器选项(-std=c++03等)将不再支持
  2. 工具链进化

    • 持续增加对新架构特性的支持
    • 逐步淘汰老旧架构和过时特性

对于需要长期维护的项目,建议:

  • 使用 FuSa 版本的 LTS 发布系列
  • 定期评估工具链更新需求
  • 建立完整的测试验证流程确保兼容性

6. 技术支持与反馈

Arm 欢迎用户提交缺陷报告和改进建议。对于 6.22 版本需要注意:

  1. 支持政策

    • 这不是 LTS 版本,后续缺陷修复和增强将根据维护政策考虑
    • 没有长期支持承诺
  2. 问题报告

    • 建议通过供应商或使用工作/学术邮箱提交问题
    • 应包含完整错误信息、预处理后的源代码和重现步骤
  3. 替代方案

    • 对于关键项目,考虑使用 Arm Compiler for Embedded FuSa
    • 咨询销售代表了解授权选项

对于嵌入式开发社区来说,虽然 6.22 版本提供了许多新特性,但其遗留状态和非安全认证的性质意味着它可能更适合非关键项目的短期使用。在实际项目中选择工具链版本时,需要仔细评估项目需求、维护周期和安全要求,做出最适合的技术决策。

http://www.jsqmd.com/news/920424/

相关文章:

  • 新手硬件工程师必看:DDR3 PCB布局布线,避开这5个坑,信号质量稳了
  • 告别信号完整性问题:用实际案例复盘一次DDR3设计从失败到成功的全过程
  • TaiBai芯片:脑启发计算与脉冲神经网络硬件革新
  • 选型避坑指南:如何根据项目需求(Robotaxi vs. 低速无人车)看懂激光雷达参数表?
  • EEG图像重建技术:从脑电信号到视觉内容解码
  • 保姆级避坑指南:用Raspberry Pi Zero 2 W连接ADS1115和多个传感器,搞定智能花盆数据采集
  • Inkscape光线追踪扩展完全指南:零基础绘制专业光学图表的终极教程
  • 番茄小说下载器:快速将网络小说转为本地电子书的完整解决方案
  • 别让电源毁了你的DDR3稳定性:1.5V电源平面分割、滤波电容摆放的细节与实测
  • 保姆级教程:用VTST脚本给VASP打补丁,搞定CI-NEB过渡态计算
  • YOLOv8+DeepSORT项目实战:如何自定义检测区域与越界规则(以停车场和商场入口为例)
  • 抖音无水印视频下载:3分钟学会的终极免费工具使用指南
  • Scandit这家瑞士公司的技术,如何让你手机摄像头变成专业扫码枪?
  • Win10/Win11下Cadence全家桶卡顿?可能是输入法埋的‘雷’,保姆级排查与修复指南
  • 前端也能用国密?一招让Vue/React项目通过sm-crypto调用SM3哈希与SM2签名
  • 2026年5月30日博客精选
  • 别只当壁纸播放器!DreamScene2的HTML玩法:让桌面变身可点击的个性化信息板
  • 前端也能玩转国密?Vue/React项目集成sm-crypto进行数据加密的完整指南
  • 别再只盯着快充功率了!一文读懂USB PD物理层如何保证你的充电数据不丢包
  • 不止于扫描:用Ubertooth One和Wireshark玩转蓝牙BLE协议分析
  • 保姆级教程:在Ubuntu 22.04上从零搭建SUMO交通仿真环境(含版本避坑指南)
  • Modelsim仿真Vivado IP核报错?PLL的glbl例化与PS端避坑指南
  • 别只盯着命令行!用eNSP图形化界面配置USG5500防火墙策略,效率翻倍
  • 87个公共Tracker服务器完整指南:告别BT下载卡顿的终极方案
  • 别再死记硬背了!用Multisim仿真软件5分钟搞定戴维南定理(附实操步骤)
  • 抖音直播数据采集工具:零基础获取实时弹幕与互动数据
  • 从“抄答案”到“懂原理”:拆解头歌平台OpenGL几何变换代码里的5个关键细节
  • 电力自动化通信入门:手把手教你用Python模拟IEC104协议的数据采集与遥控
  • 别再死记payload了!手把手教你用PHP代码动态生成CTF序列化利用点
  • FPGA图像缩放+GTX光传输+UDP网传:一个视频处理系统的数据流完整解析(附源码)