EDA365电子论坛网

标题: 详细了解一下ARM的主流编译器(armcc、iar、gcc for arm)(中) [打印本页]

作者: uperrua    时间: 2020-9-2 15:33
标题: 详细了解一下ARM的主流编译器(armcc、iar、gcc for arm)(中)
本帖最后由 uperrua 于 2020-9-2 15:46 编辑
! B# t/ H! N0 H( i- o% |0 A! y$ x. _/ d& Q7 W, j
IAR+ t) v) E0 ~9 {$ R
  相比于 ARM 对于编译器的灵活安装,IAR 的编译器则只跟随其 IDE 发布,编译器不独立提供。IAR 安装后,目录就是下面这个样子了:+ a$ S2 l* _! g, R0 t

! d/ |# S8 X4 A5 p1 o # {, [* y9 y* q' M5 R

6 {# ?! J0 x: R+ {: Z6 t这里我们重点关注一下arm目录下的相关内容。其中内容有很多,这里主要介绍一下编译器相关的那些,首先看下图
& l% ]0 L! c. p* [  V+ Y- z* h( C& u! y1 o+ i! Z5 t
; W! y9 V/ W2 V
: l2 C+ k  o- C
  我们可以手动提取其编译器,来作为命令行工具使用。但是对于 IAR 还是不建议这么用,个人感觉 IAR 在设计时,估计没考虑过让用户使用命令行模式来独立使用编译套件,因为其编译套件和其他好多东西都放在了一个目录中,不像ARM 将编译套件独立存放。但是,IAR 的编译套件是支持命令行使用的 ,在其介绍文档中有这么一句话:The compiler, assembler, and linker can also be run from a command line environment,if you want to use them as external tools in an already established project environment. 官方的介绍文档主要就是《 IAR C/C++ Development Guide Compiling and Linking》。
5 M& z3 q7 F0 R  s- _, U% _$ ]% ~# Q! y7 \% S9 H3 W* a
1. IAR 我用的比较少,主要内容来自于官方文档。管方文档更加详细,如有疑问直接去官方文档查看即可!官方文档目录为 IAR安装目录\arm\doc。具体如下:
5 u9 C7 B/ y( p, N% e9 {+ P. h2. 还可以直接从 IAR 的 IDE 的菜单进入:菜单 -> help
( a; c$ @  ]) M; I: K2 S* U
4 F0 ?7 X- x6 L0 \2 Y, i 1 E' [, O9 l- r( v4 q

- p7 {" E6 n4 Q% s; V& i( a+ ]  c
3 I  M! ^  q" Z/ V' v3 Wiasmarm.exe) V9 R$ E/ x8 ?. y" |
  这个是 IAR 的汇编语言的编译器。官方文档是这么介绍的:The IAR Assembler for Arm is a powerful relocating macro assembler with a versatile set of directives and expression operators. The assembler features a built-in C language preprocessor and supports conditional assembly. 大意就是: IAR Assembler for Arm是一个功能强大的重定位宏汇编程序,具有多种指令和表达式运算符。 汇编程序具有内置的C语言预处理程序,并支持条件汇编。该工具官方有个独立的说明文档《IAR Assembler Reference Guide》,里面有该工具的详细使用说明。
- d0 S/ X* I9 u$ f/ z7 q, F0 X. P9 M! A$ I4 }/ o$ a  i

$ X* F; G$ v  |  P6 h' e# g3 f8 L( I
iccarm.exe1 y, O. e2 X6 j5 {' }
  这个是 IAR 的 C/C++ 编译器。官方文档是这么介绍的:The IAR C/C++ Compiler for Arm is a state-of-the-art compiler that offers the standard features of the C and C++ languages, plus extensions designed to take advantage of the Arm-specific facilities.大意就是: IAR C / C ++ Compiler for Arm是一个最先进的编译器,提供C和C ++语言的标准功能,以及旨在利用Arm特定功能的扩展。- `8 c" h7 }) p4 h+ M: s/ Y4 }
  默认使用的头文件目录.\arm\inc\<vendor>: F( b1 r% t# H$ E& O

: A( D. [0 D: f# b2 T  G
& g  `4 k! O' V. j& _. B/ o& _' k/ Y' f: Y
IDE中有两个工具可将应用程序源文件转换为中间文件目标文件。 IAR C / C ++编译器和IAR汇编器。 两者都产生行业标准格式ELF中的可重定位目标文件,包括DWARF调试信息的格式。下图显示了编译过程:6 S: @7 ^$ N% S8 m+ B

5 s: B* [7 ^; {, b/ V$ _ : M- L0 s7 G0 A" I0 r9 h

: ]1 f! ^0 s( V& f6 R, P3 Q: J$ T# r/ p) U0 ~  z
ilinkarm.exe# S* L2 p6 V7 Q
  这个是 IAR 的连接器。官方文档是这么介绍的:The IAR ILINK Linker for Arm is a powerful, flexible software tool for use in the development of embedded controller applications. It is equally well suited for linking small, single-file, absolute assembler programs as it is for linking large, relocatable input, multi-module, C/C++, or mixed C/C++ and assembler programs. 大意就是:IAR ILINK Linker for Arm是一款功能强大,灵活的软件工具,可用于嵌入式控制器应用程序的开发。 它同样适用于链接小型,单文件,绝对汇编程序,因为它用于链接大型可重定位输入,多模块,C / C ++或混合C / C ++和汇编程序。
6 I9 v  x8 @/ v3 H  ilinkarm 使用并生成行业标准的ELF和DWARF作为对象格式文件。在.\arm\config目录下,包含了针对各平台的连接器使用的配置文件。
  ?3 ~$ E: K. n# T5 k% i
4 N2 {1 B! c6 F- i% p
* _# \0 N7 u$ g, e4 P3 {2 H3 V+ a" e1 X5 f2 `* z- T6 g
IAR ILINK链接器(ilinkarm.exe)用于构建最终应用程序。通常,链接器需要以下信息作为输入:8 ~/ J! h6 c1 k' a" @
1 j' z% U  ]0 o. U

' W7 o* u% A0 @& A* {下图显示了链接过程:
6 C6 I$ A6 h7 G& J8 A
) T1 P" Q; @& v# O. c, s ! ~" Q" V# O' P

1 X# U) V, Q; z" |6 @  a2 kIAR ILINK链接器生成ELF格式的绝对目标文件,其中包含可执行镜像。 链接后,可以使用生成的绝对可执行映像
& w- E* B  l0 w6 x" l6 s0 @% G% K  s+ N

/ f/ ]5 V6 I( p. }% `" I- i$ `! R' u% ]/ V* ~
iarchive.exe% s: [$ L. U5 E/ U; `6 H
档案管理工具,类似于 ARM 的 armar 和 GCC 的 ar。用于创建和操作几个ELF目标文件的库(存档)。库文件包含多个可重定位的ELF对象模块,每个模块都可以由链接器独立使用。 与直接指定给链接器的对象模块相比,只有在需要时才包含库中的每个模块。: m" |& ]/ t# a

8 n) n5 `9 A: z3 z! ]7 d$ t5 {# k- M& c% N2 c+ ~3 ^  G
# m: W5 q( r' ~3 k, X
使用示例:
) x( O: O( [# C" O5 C6 _, J$ ]/ @: H+ {
- f* ]5 U7 N! u# _. l: s1 Z

# A1 o) x$ a  V6 @, ^/ S; {ielftool.exe4 y* T% I, j1 o2 f5 G
ARM ELF文件工具,类似于 ARM 的 fromelf 和 GCC 的 elfedit。对ELF可执行映像执行各种转换(例如,填充,校验和,格式转换等)。安装目录.\arm \ src\elfutils下提供了 ielftool 源代码(Microsoft VisualStudio项目)。 如果对如何生成校验和或格式转换要求有特定要求,则可以相应地修改源代码。" B  g+ d) z/ V+ X+ Z2 p6 C

# G4 s6 r" w; I% Y5 k& o* m# n
# x. S; d* x* o; m/ k1 }- o1 B6 r' ]0 T: J5 C3 K2 w

" U/ Q9 r5 c- K使用示例:  P, m4 h% g7 ]) V7 r$ z
# I' O4 X/ \3 h

6 `. e* O% Q  u% E/ \( j8 }8 E2 F* M$ a& ^+ N6 Q
ielfdumparm.exe$ Q$ o6 f$ _, G9 P$ d$ [
针对 ARM ELF 格式的文件的 Dumper工具。类似于 GCC 的 objdump,用于创建ELF可重定位或可执行映像内容的文本表示。主要用于以下三个方面:8 W- f7 T) p' O4 |- C* P  E) |

7 _3 J7 }; J0 h5 R$ ?! ^1 z; s- }* O4 h
5 u8 O& x  P. m
' G) H* y6 V$ {( d& X$ O1 }
7 P# W( a  S- c8 o5 E( Q0 k" H2 e8 C
iobjmanip.exe
( m5 r0 f( d7 w. ~, K" j% a针对 ARM ELF 格式的 Object 文件的操作工具。用于执行ELF目标文件的低级操作。
2 y2 n1 \; X4 V6 T1 W, d( Z! o" Z/ D; {' N6 o3 e) z5 c

0 Q, b1 s, C" f$ c2 L
' y1 s+ z) ~/ f) L9 R1 H使用示例:) |5 h3 _5 @7 E& {( N
5 @/ Z* U- I! L( B4 X$ y# H
5 t8 @0 a. @1 s* K6 \0 |
5 d& e- c) i! {+ v) o7 |
isymexport.exe! {6 \: g0 ~; M$ U
绝对符号导出器。 从ROM映像文件中导出绝对符号,以便在链接附加应用程序时使用它们。5 i2 e: |" ]( B; f3 D; v; D" g1 [

( Y; Z" _/ T4 x" g: `% D; r
' ]: J6 q6 A( o% U3 _' p4 ?; v
2 Q3 {, j: ]- \9 b( c1 y. p" w! uiexe2obj.exe0 u) M1 ^  t9 h4 A
IAR ELF可重定位对象创建器。从可执行的ELF目标文件创建可重定位的ELF目标文件。; T. p2 ?9 H) I+ X3 w! [. K1 P+ E
9 G5 R, S$ q/ V6 ~8 A& s
+ A& t! T( `" Y; }* `  C

2 N3 [9 r7 r% x7 b; k; w! K1 y' [3 s( @3 p  U3 }/ `1 M

作者: SsaaM7    时间: 2020-9-2 16:07
详细了解一下ARM的主流编译器(armcc、iar、gcc for arm)
作者: meady    时间: 2020-9-2 19:32
学习一下编译器内容
4 R$ z7 P. |5 L: t# u




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2