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

article/2025/11/9 10:14:33

目录

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://chatgpt.dhexx.cn/article/3dNw3frx.shtml

相关文章

ARM处理器开发详解

目录 第一章 嵌入式系统基础知识&#xff08;不考&#xff09;嵌入式系统特点交叉调试调试器 第二章 嵌入式 ARM 技术概论ARM的基本数据类型&#xff08;不考&#xff09;选择ARM芯片的一般原则Cortex-A9内核的八种工作模式流水线&#xff08;不考&#xff09;寄存器组织程序状…

ARM嵌入式常用开发工具介绍及插画开发流程(更新)

这里接着前边的开发环境的配置说&#xff0c;其实用于开发的话&#xff0c;基本的开发环境已经架构好了&#xff0c;不过由于嵌入式开发环境的特殊性(交叉编译)&#xff0c;我们还会用到一些其他的外围工具&#xff0c;这里做简要的说明。并重新介绍一下整个开发环境中&#xf…

ARM介绍

什么是ARM&#xff1f; ARM即可以是一家芯片设计厂商的名字&#xff0c;也可以代表一类微处理器的通称&#xff0c;还可以表示为一种技术的名称&#xff08;这个问题面试的时候可能问道&#xff09; 1、ARM是一个公司&#xff1a;Advanced RISC Machine Acorn RISC Machi…

《 Arm Compiler 5.06 》__ARM编译器官网下载、安装和使用说明(小白也能懂)

目录 一、前言 二、官方网站下载 三、编译器安装在 Keil 软件上 四、Keil选择编译器V5 “ V5.06 update 7(build 960) ” 五、测试 六、我的资源 (*&#xffe3;︶&#xffe3;)创作不易&#xff01;期待你们的 点赞、收藏和评论喔。 一、前言 Keil MDK-Arm5.37不再默认…

arm-linux开发板相关软件的使用

文章目录 1. 串口调试1.1 简介1.2 secureCRT使用步骤 2. 文件传输2.1 文件传输: tftp2.2 文件传输: NFS (相当于将主机作为一个u盘插入开发板) 3. 交叉编译3.1 下载3.2 配置 1. 串口调试 1.1 简介 一般而言&#xff0c;嵌入式开发板使用串口来监控后台。可以使用串口线连接开…

嵌入式:ARM相关开发工具概述

文章目录 JTAG仿真器J-LINK仿真调试器J-Link ARM主要特点 U-LINK仿真调试器ULINK2特点ULINK和JLINK的比较 ADS1.2集成开发环境使用ADS创建工程 JTAG仿真器 JTAG(Joint Test Action Group&#xff1b;联合测试行动小组)是一种国际标准测试协议&#xff08;IEEE 1149.1兼容&…

嵌入式:ARM常用开发编译软件介绍

文章目录 编译器介绍1、ADS1.22、ARM RealView Developer Suite (RVDS)3、IAR EWARM4、KEIL ARM-MDKARM5、WIN ARM-GCC ARM 编译器介绍 1、ADS1.2 ADS&#xff08;ARM Developer Suite&#xff09;&#xff0c;是在1993年由Metrowerks公司开发是ARM处理器下最主要的开发工具。…

北京邮电大学计算机考研资料汇总

北京邮电大学研招网 北京邮电大学计算机学院 北京邮电大学软件学院 北京邮电大学网络空间安全学院 北京邮电大学&#xff08;Beijing University of Posts and Telecommunications&#xff09;&#xff0c;简称北邮&#xff0c;是中华人民共和国教育部直属、工业和信息…

23届计算机保研经验帖(北邮)

21届计算机保研经验帖 本文非常适合保研非实力派选手&#xff0c;越早阅读离心仪学校就越近一步。有很多同学担心自己拿到推免资格却无学可上&#xff0c;这大可放心&#xff0c;我们学校很多同学都轻松得到西南985高校的offer&#xff0c;但如果想保到北上广的计算机强校的话…

2019年北理工计算机北航计算机中山大学计算机北邮网研院保研夏令营

目录 1.个人情况 2.夏令营入营情况 3.报名准备建议 3.1 准备一个txt 文本&#xff0c;上面有个人信息&#xff0c;方便填写每个大学的报名申请&#xff0c;包括以下信息&#xff1a; 3.2 电脑上新建一个文件夹和一个网页收藏夹 3.3 一些可能需要使用的工具和软件&#xf…

北邮考研复试机试准备过程(已上岸)

纯自用请勿转载&#xff0c;用来给自己最后复习和捋思路用的&#xff0c;主要参考牛客网王道机试指南&#xff0c;C、C混用。考研人太久不写代码了…什么都不记得了&#xff0c;从头开始过一遍吧。 黑色代码段是要记住的重点函数/方法。每天下午做几个小时&#xff0c;一共不到…

2024考研北京邮电大学计算机/软件/网安/智能考研信息汇总

一、北京邮电大学简介 二、各院官方网址 北京邮电大学研究生院官网 计算机学院&#xff08;国家示范性软件学院&#xff09;官网 网络空间安全学院官网 人工智能学院官网 三、招生目录和导师重要性介绍 北邮以前共有四个学院属于计算机类&#xff0c;分别为&#xff1a;计…

所有计算机专业考研都变了!西安邮电大学计算机考研改考

西安邮电大学是一所双非大学&#xff0c;位于陕西省西安市。虽然是双非&#xff0c;但是计算机学科评估C&#xff0c;软件工程学科评估C&#xff0c;计算机实力在双非大学中还算不错。邮电类大学的计算机专业一般都比较强&#xff0c;比如北京邮电大学&#xff0c;南京邮电大学…

2019北邮计算机院机试真题

目录 19计算机院机试真题Problem A 二进制Problem B 二叉树Problem C 最短路径Problem D 方块阵 19计算机院机试真题 计算机院的机试题真难&#xff0c;没有4A的&#xff0c;第四题的题目看了一下&#xff0c;好像是矩阵的&#xff0c;题目记不清了&#xff0c;如果你考计算机…

北邮 计算机网络

一、前言 本文总结北邮计算机学院《计算机网络》的学习资料&#xff0c;希望能帮到学弟学妹&#xff0c;打好基础。 计算机网络也是计算机专业考研的必考科目之一&#xff0c;4学分&#xff0c;重要性不言而喻。学科特点是知识点非常多&#xff0c;每一章都要画一整张的思维导…

北邮考研_2019_计算机学院/网研院_时间和各科目规划安排

时间安排 科目 3-7月 7-9月 10-11 12月 数学 暑假前争取将一轮数学复习完 中期复习书&#xff1a;李正元数学全书&#xff08;比李永乐写的好&#xff09; 《李永乐真题大全解》 掐表做题 英语 3-4月&#xff1a;单词 预计7月中旬,将英语第一遍阅读做完&…

录取清华/北大/中科院/北邮都有!双非北京信息科技大学计算机考研光荣榜

上次我们看了几个二本大学的计算机考研光荣榜&#xff0c;发现虽然有上岸985/211大学的同学&#xff0c;但是不多。可以说&#xff0c;上岸好大学的概率非常非常低&#xff0c;是一件很难的事情。 那么有没有考上好大学多一些的&#xff0c;成绩比较好的双非大学呢&#xff1f;…

北邮考研上岸历程

考研初试倒数第一上岸北邮心路历程 嗨&#xff0c;准研究生们&#xff01; 从去年到现在考研终于算是告一段落&#xff0c;所以想记录一下&#xff0c;与君共勉。 本人概况 本科双非&#xff0c;本科信息安全专业&#xff0c;一志愿北京邮电大学网络空间安全专业。初试总分…

2023北京邮电大学计算机考研信息汇总

北京邮电大学研招网 北京邮电大学计算机学院 北京邮电大学软件学院 北京邮电大学网络空间安全学院 北京邮电大学&#xff08;Beijing University of Posts and Telecommunications&#xff09;&#xff0c;简称北邮&#xff0c;是中华人民共和国教育部直属、工业和信息…

20考研历程-北京邮电大学计算机学院

首先&#xff01;&#xff01;&#xff01; 凝紫暮学长吐血整理的巨全的北邮考研信息 帮助很大&#xff01;&#xff01; 初试&#xff1a; 数一、英一、4门专业课&#xff08;803&#xff08;21后就是408了&#xff09;&#xff0c;难度20年近似408、出题范围不限于408范围…