ARM 编译器 Arm Compiler for Embedded 6 相关工具链简介

news/2024/11/29 12:50:28/

目录

1, Introduction to Arm® Compiler 6

1.1 armclang

1.2 armasm

1.4 armar

1.5 fromelf

1.6 Arm C++ libraries

1.7 Arm C libraries

1,8 Application development ,ARM程序开发流程

2,ARM 编译器 5和ARM 编译器 6的兼容性

3,ARM编译器相关链接


1, Introduction to Arm® Compiler 6

Arm Compiler 6 是 Arm 中用于 Arm Cortex® 和 Arm Neoverse™ 处理器的最先进的 C 和 C++ 编译工具链。Arm Compiler 6 与 Arm 架构一起开发。因此,Arm 编译器 6 经过优化,可为从小型传感器到 64 位设备的嵌入式裸机应用生成高效代码。

Arm Compiler 6 将 Arm 优化的工具和库与基于 LLVM 的现代编译器框架相结合。Arm 编译器 6 中的组件包括:

  1. armclang
  2. armasm
  3. armlink
  4. armar
  5. Arm C++ libraries
  6. Arm C libraries

1.1 armclang

编译 C、C++ 和 GNU 汇编语言源的编译器和汇编编译器。基于LLVM和Clang技术。Clang是LLVM的编译器前端,可以支持C和C++等编程语言。

1.2 armasm

传统的汇编编译器,针对ARM语法的汇编代码。使用armclang是针对GNU 语法的汇编文件。

armlink链接器可以将一个或多个目标文件以及一个或多个目标程序库链接,生成一个可执行的程序。

1.4 armar

归档器(archiver)可以将 多个ELF 对象收集在一起,并在归档或库中进行维护。如果不经常更改这些文件,这些已经编译好的ELF文件可以减少编译时间,因为不必每次使用它们时都从源代码重新编译。并且可以将此类库或存档传递给链接器,以代替多个 ELF 。还可以使用存档分发给第三方应用开发人员,这样就可以在不泄露源代码的情况下共享存档。

1.5 fromelf

fromelf可以将 Arm ELF 文件转换为二进制格式。它还可以生成有关输入的elf文件的文本信息,例如其反汇编、代码大小和数据大小。

1.6 Arm C++ libraries

Arm C++库是基于LLVM libc++工程:

  • libc++abi 库是一个rubtime 库,提供大量的低级语言特性的实现。
  • libc++ 库同样提供 ISO C++的标准库实现

如果C++编译单元是用不同的主要或次要版本的Arm编译器编译的,并且链接到单个image。那么ARM不保证该c++编译单元的兼容性。因此,ARM建议在编译C++源码时,使用单一版本的工具链。此外也支持C和C++的混合编译。

1.7 Arm C libraries

ARM的C库提供:

  • 标准的C语言库特性的实现。
  • 许多非标准的通用的C语言扩展
  • POSIX 扩展功能。
  • 使用POSIX的函数标准化。

1,8 Application development ,ARM程序开发流程

一个典型的ARM程序开发流程应该包含:

  1. 为主程序开发C/C++源码 (armclang)。
  2. 为底层硬件组件开发汇编源码,比如中断服务子程序(armclang,或者针对arm 汇编代码的armasm)
  3. 将所有目标文件链接成一个elf image(armlink)
  4. 将一个image转换成 plain binary, Intel Hex, 或者Motorola-Smeld等格式。

下图展示了一个典型的应用程序开发流程:


需要注意的是,

2,ARM 编译器 5和ARM 编译器 6的兼容性

如果用户之前使用的是ARM compiler 5,需要将code在ARM compiler 6中编译,可以参考文档:

Arm Compiler for Embedded Migration and Compatibility Guide

 compiler 5和compiler6最大的区别在于compiler 5使用的是armcc,而compiler 6使用的是armclang。以下是二者工具链的对比表格:

Table 1. List of compilation tools
Arm Compiler 5Arm Compiler for Embedded 6Function
armccarmclangCompiles C and C++ language source files, including inline assembly.
armccarmclangPreprocessor.
armasmarmasmLegacy assembler for assembly language source files written in armasm syntax. Use the armclang integrated assembler for all new assembly files.
Not availablearmclang. This is also called the armclang integrated assembler.Assembles assembly language source files written in GNU assembly syntax.
fromelffromelfConverts Arm ELF images to binary formats and can also generate textual information about the input image, such as its disassembly and its code and data size.
armlinkarmlinkCombines the contents of one or more object files with selected parts of one or more object libraries to produce an executable program.
armararmarEnables sets of ELF object files to be collected together and maintained in archives or libraries.

3,Compiler 6所支持的ARM 架构

Arm Compiler for Embedded 6支持以下ARM架构:

  • Armv9-A.
  • Armv8-A and all update releases, for bare-metal targets.
  • Armv8-R.
  • Armv8-M.
  • Armv7-A for bare-metal targets.
  • Armv7-R.
  •  Armv7-M.
  • Armv6-M.
     

当编译代码时,编译器需要知道以哪种体系结构为目标,以便利用特定于该体系结构的特性。要指定目标架构,必须提供目标执行状态(AArch32或AArch64),以及目标体系结构(例如Armv8-A)或目标处理器(例如cortex-A53处理器)。

要使用armclang指定目标执行状态(AArch64或AArch32),使用强制的 --target 命令行选项:

--target=<arch>-<vendor>-<os>-<abi>

支持的目标包括:

  • aarch64-arm-none-eabi
    • 为A64状态产生A64的指令,如果没有指定-march 或者-mcpu 属性则暗示-march=armv8-a
  • arm-arm-none-eabi
    • 为A32状态产生A32的指令,同时必须使用-march(指定架构)-mcpu(指定处理器)

如果想要针对某个架构的所有处理器生成通用的代码,可以使用-march 选项,使用 -march=list
 可以看到全部的支持的架构。此外,如果想针对某款处理器优化你的代码,可以使用 -mcpu 选项,使用 -mcpu=list 可以看到全部的支持的处理器。

需要注意的是,--target, -march和-mcpu选项是armclang选项。对于所有其他工具,如armlink,使用 --cpu选项指定目标处理器和体系结构。

4,ARM编译器相关链接

Arm product resourcesDocument IDConfidentiality
Arm Compiler for Embedded Reference Guide101754Non-Confidential
Arm Compiler for Embedded Migration and Compatibility Guide100068Non-Confidential
Arm Compiler for Embedded Arm C and C++ Libraries and Floating-Point Support User Guide100073Non-Confidential
Arm Compiler for Embedded Errors and Warnings Reference Guide100074Non-Confidential
Arm Support--
Arm Compiler for Linux--
Arm Development Studio Getting Started Guide101469Non-Confidential
Arm Development Studio User Guide101470Non-Confidential
Arm Compiler for Embedded Licensing Configuration--
Request a license--
Manage Arm Compiler Versions-Non-Confidential
User-based licensing User Guide102516Non-Confidential
CMSIS 5-Non-Confidential
Arm® architecture and specificationsDocument IDConfidentiality
Arm Architecture Reference Manual for A-profile architectureDDI 0487Non-Confidential
ARM Architecture Reference Manual ARMv7-A and ARMv7-R editionDDI 0406Non-Confidential
A-Profile Architecture-Non-Confidential
M-Profile Architecture-Non-Confidential
R-Profile Architecture-Non-Confidential
ABI for the Arm Architecture-Non-Confidential
Base Platform ABI for the Arm Architecture-Non-Confidential
C Library ABI for the Arm Architecture-Non-Confidential
C++ ABI for the Arm Architecture-Non-Confidential
C++ Application Binary Interface Standard for the Arm 64-bit Architecture-Non-Confidential
DWARF for the Arm Architecture-Non-Confidential
ELF for the Arm Architecture-Non-Confidential
Exception Handling ABI for the Arm Architecture-Non-Confidential
Procedure Call Standard for the Arm Architecture-Non-Confidential
Run-time ABI for the Arm Architecture-Non-Confidential
Support for Debugging Overlaid Programs-Non-Confidential
Addenda to, and Errata in, the ABI for the Arm Architecture-Non-Confidential
Whitepaper - Armv8-M Architecture Technical Overview-Non-Confidential
Armv8-M Stack Sealing vulnerability-Non-Confidential
Non-Arm resourcesDocument IDOrganization
GCC-Top (Using the GNU Compiler Collection (GCC))
GNU Binutils-https://sourceware.org/binutils
Itanium C++ ABI-C++ ABI Summary
The Security Implications Of Compiler Optimizations On Cryptography - A Review-https://arxiv.org
Using Clang as a Compiler-Welcome to Clang's documentation! — Clang 17.0.0git documentation
Automatic variable initialization-https://reviews.llvm.org
C++ implementation status in LLVM Clang-Welcome to Clang's documentation! — Clang 17.0.0git documentation
Undefined Behavior Sanitizer-Welcome to Clang's documentation! — Clang 17.0.0git documentation
Update for Universal C Runtime in Windows-https://support.microsoft.com

http://www.ppmy.cn/news/42147.html

相关文章

JavaEE企业级应用开发教程——第十二章 Spring MVC数据绑定和相应(黑马程序员第二版)(SSM)

第十二章 Spring MVC数据绑定和相应 12.1 数据绑定 在 Spring MVC 中&#xff0c;当接收到客户端的请求时&#xff0c;会根据请求参数和请求头等信息&#xff0c;将参数以特定的方式转换并绑定到处理器的形参中&#xff0c;这个过程称为数据绑定。数据绑定的流程大致如下&…

PostgreSQL慢sql原因和优化方案

文章目录导致PostgreSQL运行缓慢的原因&#xff1a;1. 数据库服务器硬件不足&#xff0c;例如CPU、内存、磁盘I/O等。2. 数据库中存在大量的慢查询&#xff0c;需要优化查询语句或索引。3. 数据库中存在大量的并发连接&#xff0c;需要调整数据库连接池的大小。4. 数据库中存在…

nginx配置https正向代理

适用场景&#xff1a; 因网络访问权限限制&#xff0c;局域网内仅有1台电脑可以上外网&#xff1b;内网其他机器如果需要访问外网&#xff0c;需要通过该电脑进行代理访问。 本文分别介绍如何在windows&#xff0c;linux上如何配置nginx正向代理。 nginx配置https正向代理&am…

【Spark】RDD缓存机制

1. RDD缓存机制是什么&#xff1f; 把RDD的数据缓存起来&#xff0c;其他job可以从缓存中获取RDD数据而无需重复加工。 2. 如何对RDD进行缓存&#xff1f; 有两种方式&#xff0c;分别调用RDD的两个方法&#xff1a;persist 或 cache。 注意&#xff1a;调用这两个方法后并不…

OpenCV中图像操作的基础介绍

文章目录 目录 文章目录 前言 一、加载、显示、保存图像 示例代码&#xff1a; 二、调整图像大小 示例代码: 三、裁剪图像 示例代码&#xff1a; 四、反转图像 示例代码&#xff1a; 五、调整亮度和对比度 示例代码&#xff1a; 六、代码整合 七、其他常见操作 …

Redis数据迁移过程,使用jedis客户端,需要注意区分string和byte命令转换字符编码不一致的问题,使用不当会导致丢数据

1.了解String与byte之间存在的字符编码映射规则&#xff08;java为例&#xff09; string与byte来回转换&#xff0c;需要指定一样字符编码规则 详细原因请参考&#xff1a;关于Java中bytes到String的转换-阿里云开发者社区 简单来说 &#xff08;1&#xff09;string和by…

Cont. DB Project ----- MySQL Python Project

Function achieve &#xff08;Cont.&#xff09; Item Search 添加一个新函数search_item&#xff0c;用于实现商品搜索的功能。参数&#xff1a;keyword (为了模糊查询) # search items by keywords def search_item(keyword):cursor, db connect_database()sql f"SE…

《花雕学AI》06:抢先体验ChatGPT的九个国内镜像站之试用与综合评测

最近ChatGPT持续大火&#xff0c;大家们是不是在网上看到各种和ChatGPT有趣聊天的截图&#xff0c;奈何自己实力不够&#xff0c;被网络拒之门外&#xff0c;只能眼馋别人的东西。看别人在体验&#xff0c;看别人玩&#xff0c;肯定不如自己玩一把舒服的啊。 上一期&#xff0…