当前位置: 首页 > 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.zskr.cn/news/1431747.html

相关文章:

  • 告别信号完整性问题:用实际案例复盘一次DDR3设计从失败到成功的全过程
  • TaiBai芯片:脑启发计算与脉冲神经网络硬件革新
  • EEG图像重建技术:从脑电信号到视觉内容解码
  • 保姆级避坑指南:用Raspberry Pi Zero 2 W连接ADS1115和多个传感器,搞定智能花盆数据采集
  • 番茄小说下载器:快速将网络小说转为本地电子书的完整解决方案
  • YOLOv8+DeepSORT项目实战:如何自定义检测区域与越界规则(以停车场和商场入口为例)
  • 别只当壁纸播放器!DreamScene2的HTML玩法:让桌面变身可点击的个性化信息板
  • 别只盯着命令行!用eNSP图形化界面配置USG5500防火墙策略,效率翻倍
  • 从“抄答案”到“懂原理”:拆解头歌平台OpenGL几何变换代码里的5个关键细节
  • 保姆级教程:Win10系统下MATLAB 2021b从下载到激活的完整避坑指南
  • 保姆级教程:用Ansys Workbench 2023 R2找出BGA焊点最容易坏的位置(附模型文件)
  • 避坑指南:交叉编译ZLMediaKit启用WebRTC时,OpenSSL和libsrtp的配置雷区全解析
  • FPGA开发板吃灰了?用拨码开关和LED灯做个4位乘法器“计算器”吧(Quartus II实战)
  • CM211-1刷Armbian避坑大全:从S905L3固件选择、网络修复到长期稳定运行指南
  • 10分钟精通:西安交通大学LaTeX论文模板的终极排版解决方案
  • 企业安全正在从账号安全走向执行安全
  • WechatDecrypt终极指南:三步快速掌握微信聊天记录解密技术
  • 从一次数据采集掉速排查说起:WIN10下优化485模块通信的完整避坑指南
  • Vue项目里Excel/Word/PDF预览的三种方案实战:从xlsx插件到vue-office组件
  • TPU 不出售,但为什么?
  • 别再手动配对了!用STM32+ECB02蓝牙模块实现自动重连主从通信(附完整代码)
  • 用Python玩转模拟退火算法:从物理退火到TSP求解的保姆级实战
  • 手把手教你用Kintex7 FPGA搭建一个视频采集卡:从HDMI输入到UDP网络流传输的完整流程
  • 从手机到数据中心:实战解析LPDDR5 Link ECC与DDR5 On-die ECC如何守护你的数据
  • ESP32开发板到手第一步:5分钟搞定VSCode环境,让板载LED闪起来
  • 别再这么用了!kkFileView文件预览服务getCorsFile接口的安全配置避坑指南
  • 逆向分析入门:通过Cheat Engine的多级指针理解程序内存布局与全局变量
  • 80C517A微控制器移位指令Bug与Keil C51兼容性处理
  • 别再只用云平台了!手把手教你用SIoT在自家局域网搭个私有物联网服务器(Win/Mac/Linux通用)
  • 告别串口!树莓派无屏无网线直连Windows SSH,用‘arp -a’和MobaXterm五分钟内连接