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

news2025/6/17 2:56:12

目录

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.coloradmin.cn/o/411988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Opencv项目实战:22 物体颜色识别并框选

目录 0、项目介绍 1、效果展示 2、项目搭建 3、项目代码展示与部分讲解 Color_trackbar.py bgr_detector.py test.py 4、项目资源 5、项目总结 0、项目介绍 本次项目要完成的是对物体颜色的识别并框选&#xff0c;有如下功能&#xff1a; &#xff08;1&#xff09;…

【权限提升】Linux Sudo权限提升漏洞(CVE-2023-22809)

文章目录前言一、Sudo介绍二、漏洞概述三、漏洞成因四、漏洞分析五、影响版本六、本地复现七、修复建议前言 Sudo存在权限提升漏洞,攻击者可过特定的payload获取服务器ROOT权限 一、Sudo介绍 sudo (su " do")允许系统管理员将权限委托给某些用户(或用户组),能够以…

网络安全与防御

1. 什么是IDS&#xff1f; IDS(入侵检测系统)&#xff1a;入侵检测是防火墙的合理补充&#xff0c;帮助系统对付网络攻击&#xff0c;扩展了系统管理员的安全管理能力&#xff0c;提高了信息安全基础结构的完整性。主要针对防火墙涉及不到的部分进行检测。 入侵检测主要面对的…

ChatGPT技术原理、研究框架,应用实践及发展趋势(附166份报告)

​ 一、AI框架重要性日益突显&#xff0c;框架技术发展进入繁荣期&#xff0c;国内AI框架技术加速发展&#xff1a; 1、AI框架作为衔接数据和模型的重要桥梁&#xff0c;发展进入繁荣期&#xff0c;国内外框架功能及性能加速迭代&#xff1b; 2、Pytorch、Tensorflow占据AI框…

5.2 中心极限定理

学习目标&#xff1a; 要学习中心极限定理&#xff0c;我会采取以下几个步骤&#xff1a; 学习基本概念&#xff1a;了解什么是随机变量、样本、总体、概率密度函数等基本概念&#xff0c;为学习中心极限定理打下基础&#xff1b;学习正态分布&#xff1a;中心极限定理的核心…

【JavaEE】计算机组成以及操作系统(进程)的基本知识

目录 前言 1、计算机基本组成 1.1、存储器 2、操作系统 2.1、 进程&#xff08;任务&#xff09;的概念 2.2、进程的管理 2.2.1、进程控制块PCB&#xff08;process control block&#xff09; 2.3、CPU分配&#xff08;进程调度&#xff09; 2.3.1、并发 2.3.2、并…

string容器

1、string的构造和赋值 #include #include using namespace std; void test01() { string str1(“hello world”); //使用字符串初始化 cout<<str1<<endl; string str2(5,‘A’); //使用 n 个字符串是初始化 cout<<str2<<endl; string str3 str2; …

深度学习数据集—水果数据集大合集

近期整理的各类水果&#xff08;包括干果&#xff09;数据集&#xff0c;分享给大家。 1、8类水果图片数据集&#xff08;每类100张图片左右&#xff09;[橘子&#xff0c;菠萝&#xff0c;苹果&#xff0c;木瓜&#xff0c;火龙果&#xff0c;香蕉&#xff0c;樱桃&#xff0…

系统升级 | RK3568开发平台成功搭载SylixOS国产实时操作系统

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

【GPT4】微软 GPT-4 测试报告(5)与外界环境的交互能力

欢迎关注【youcans的AGI学习笔记】原创作品 微软 GPT-4 测试报告&#xff08;1&#xff09;总体介绍 微软 GPT-4 测试报告&#xff08;2&#xff09;多模态与跨学科能力 微软 GPT-4 测试报告&#xff08;3&#xff09;编程能力 微软 GPT-4 测试报告&#xff08;4&#xff09;数…

被裁了,39 岁阿里 P9,攒下 1.5 亿....

今天刷知乎&#xff0c;在问题 “40 岁因为财务自由决定不上班的人&#xff0c;个人资产总和到底有多少” 下看到一位阿里 P9 的匿名回答让我狠狠的酸了一把~ 这刚刚失业的四十岁高级码农自曝了自己的人生经历&#xff0c;作为一名“阿里 P9”的程序员&#xff0c;他讲述了自己…

重庆理工大学教授程平:智能会计时代,应充分发挥数据资产的价值

近日&#xff0c;由用友主办的「智能会计 价值财务」2023企业数智化财务创新峰会北京站在北京国家会计学院圆满举办&#xff01;来自知名院校的专家学者、央国企等大型企业财务领路人、以及权威财经媒体相约北京国家会计学院&#xff0c;一同见证“智能会计”新时代的到来&…

centos 搭建 wiki

需要安装软件 mysqlmm-wikinginx&#xff08;非必须&#xff09; mysql 1.查询本机是否安装mysql rpm -qa | grep mysql 如安装&#xff0c;知道mysql账号密码&#xff0c;可以直接使用&#xff0c;跳过此步骤 如已安装&#xff08;centos可能默认已安装mysql或者之前有人…

day13_oop

今日内容 零、 复习昨日 一、final 二、static 三、多态 四、向上转型&向下转型 五、多态应用 零、 复习昨日 封装 类的封装: 1 属性私有 2提供setget 继承 A extends B子类可以使用父类非私有属性和方法好处: 复用,多态准备 重写/覆写/覆盖/Override 子类重写父类的方法,以…

什么是雪花算法?啥原理?

1、SnowFlake核心思想 SnowFlake 算法&#xff0c;是 Twitter 开源的分布式 ID 生成算法。 其核心思想就是&#xff1a;使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛&#xff0c;且 ID 引入了时间戳&#xff0c;基本上保持自增的&#xf…

关于ChatGPT人工智能浅谈

ChatGPT人工智能优点与不足 现今ChatGPT已经向我们展示了其强大的数据收集分析和处理能力&#xff0c;这点随着其不断的学习训练会越来越强。ChatGPT这类生成式人工智能在数据收集分析和处理能力这方面远远超过人类&#xff0c;虽然它目前还不能完全做到按人类的方式对数据进行…

常见的HTTP状态码及其含义

© Ptw-cwl HTTP是一种用于传输超文本数据的协议&#xff0c;在使用Java进行Web开发时&#xff0c;经常会涉及到HTTP状态码。以下是一些常见的HTTP状态码及其含义 概览 状态码含义1xx 信息性状态码指示请求已经被接受或者正在进行处理。100 Continue表示客户端可以继续发…

4月了,准备跳槽的可以看看

金三已经过去了&#xff0c;银四对于想跳槽的职场人来说&#xff0c;绝对要从现在开始做准备了。这时候&#xff0c;很多高薪技术岗、管理岗的缺口和市场需求也出来了。 所以准备4月跳槽、找工作的朋友&#xff0c;就一定要好好准备抓住机会&#xff0c;补一补自己的知识体系&…

第一章节 spring 概念与体系结构

1、Spring 概念 Spring 是 Java EE 编程领域的一款轻量级的开源框架&#xff0c;目标就是要简化 Java 企业级应用程序的开发难度和周期。 1.1、广义 Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spring Data、Spring Security 项目名称描述Spring DataSpring…

一 注册中心

一 什么是注册中心 注册中心可以说是微服务架构中的“通讯录”&#xff0c;它记录了服务和服务地址的映射关系。在分布式架构中&#xff0c;服务会注册到这里&#xff0c;当服务需要调用其它服务时&#xff0c;就到这里找到服务的地址&#xff0c;进行调用。 当我想给张三打电…