ARM编译工具

ARM 284浏览

ARM Compilation Tools

ARM编译工具就是使用广为人知的ARM
RealView编译工具。它包括如下几部分:

  • ARM C/C++编译器(armcc)
  • Microlib
  • ARM汇编器(armasm)
  • ARM链接器(armlink)
  • ARM工具(Librarian and FromELF)
这些开发工具作用于ARM微控制器系列,能够帮助你编译你所编写ARM C/C++应用程序,相比较与编写汇编来说,这样可以提高工作效率和速度。

ARM编译器工具链将C/C++源文件转换为可重定位的目标文件,它包含完整的符号信息,方便在µVision调试器调试或在线仿真。除了目标文件,编译器会生成一个列表文件,它可以包括符号表和交叉引用的信息。


Continuous Improvement

在ARM技术领域的编译器当中,ARM编译器是行业公认最高性能的。通过优化代码的密度,ARM编译器产生最小的代码大小,以达到降低存储空间成本。ARM编译器能够为 32-bit ARM指令集,16-bit Thumb指令集和32-bit/16-bit混合的Thumb-2指令集产生优化代码,同时支持标准ISO C/C++语法。
ARM编译器一直在精炼和改进代码密度和性能,并提供新的亮点,比如MicroLIB。


ARM C/C++ Compiler (armcc)

有如下特点和优势:

  • 支持ARM 模式和Thumb模式
      你可以在你的源代码中混合使用ARM代码和Thumb代码。 ARM模式下响应中断会更快,Thumb模式下有利于减少代码大小。
  • 优化代码大小的技术是处于业界领先的
       通过生成最小的代码空间来节约内存成本。
  • 优化代码性能的技术是处于业界领先的
     在不提升时钟频率的情况下,通过增加吞吐量来降低功耗。
  • 支持访问硬件的函数功能
      ARM C编译器提供了一些支持访问硬件功能的函数属性。
      示例:
       __irq允许使用C语言创建中断服务程序
       __swi(id)允许调用软件中断处理函数
  • 嵌入式汇编
       你可以将汇编代码插入到C函数当中。在快速DSP和其他信号处理算法编程中,这种做法是很有用的。即使你使用嵌入式汇编,ARM编译器也会支持全部的程序优化,。
  • 内联函数
当有些函数调用的频率比较高的时候,可以通过使用内联函数加速执行。内联函数减少了函数调用,参数传输和返回值这些开销。
  •  CPU寄存器传输参数
 
ARM编译器自动选择CPU寄存器去传输函数参数。它甚至能够通过寄存器传输和返回一些小的C结构体。
  • 可第重入的运行库
大多数的库是可重入的,并且可以被主程序和中断调用。 不需要为调用库安排特别的保护机制。
  • 兼容支持IEEE-754单精度浮点和双精度浮点
高精度浮点支持。

MicroLib

  • MicroLib是一个高度优化的库,主要是为了ARM嵌入式应用程序而建立,它是用C语言编写的。相比于ARM工具链提供的标准C库,MicroLib在代码空间上有优势,它是专门为嵌入式系统设计的。

ARM Macro Assembler (armasm)

有如下特点和优势:

  • 标准宏处理器
宏处理器支持重复使用的宏汇编程序,或者自动汇编指令系列。
  • 条件汇编控制
在同一份源代码中,你可以使用条件汇编去控制汇编源代码去创建不同的目标应用。
  • 生成符号参考列表
列表文件包括了一个可选的交叉参考,它提供一些关于汇编源文件的详细信息。

ARM Linker (armLink)

如下特点和优势:
  • 详细列表文件
链接器创建了一个全面易于理解的列表文件。它包括了一些详细信息,比如内存配置,输入模块,内存映射,符号表和交叉参考。
  • 全局代码列表
链接器产生一个全局代码列表文件,它包括代码的反汇编符号。
  • 静态栈分析
链接器能够计算栈要求是否满足要求,这样可以避免在目标应用程序运行过程中要栈检查。

ARM Utilities

有如下特点和优势:

  • The ARM Archiver (Librarian), armar
armar能够将ELF目标文件打包成标准AR库。并且可以通过创建可重入模块来节约时间,这个模块能够被链接器替换多个ELF目标文件。
拥有armar能够做到:
-创建新库
-增加新文件到库中
-替换库中独立的文件
-控制文件在库中的位置顺序
-显示指定库的相关信息
  • The ARM Elf Utility, fromelf
fromelf能够通过编译器,汇编器和链接 器去处理ARM ELF目标文件和镜像文件。
拥有fromelf能够做到:
-转换ELF镜像到其它格式,它可以被ROM加载,或者直接加载到内存当中。
-显示关于输入文件的信息,示例,反汇编,或者符号信息等。它可以输出到标准输出,也可以输出到一个文件当中。