RVCT(RealView Compile Tools):RealView编译工具
EABI(Embedded Application Binary Interface)
双短线(--)指示命令行关键字,单短线(-)用于命令行单字母选项
半位机:开发硬件经常没有最终系统的所有输入和输出设备。需要采用软件机制对应用程序代码的输入/输出(I/O)请求进行服务。此机制使用软件中断操作(SWI)操作来实现,称为半位机。半位机可让ARM目标将I/O请求从应用程序代码传递到运行调试器的主机。
几个因素会影响ARM编译程序搜索#include头文件和源文件的方式。
- -I和-J编译程序选项
- -fk和-fd编译程序选项
- 环境变量RVCT20INC和ARMINC的值
- 文件名使用绝对路径还是相对路径
- 文件名在尖括号(angle brackets)还是双引号之间(double quotes)
默认情况下,ARM编译程序使用Berkeley UNIX搜索规则,因此相对于当前位置搜索源文件和#include头文件。它指包含编译程序当前正在处理的源文件或头文件目录。选项-fk禁止当前位置形成栈。该选项运行编译程序使用Kernighan和Ritchie在The C Programming Language中介绍的搜索规则。
The ARMINC environment variable
可设置ARMINC环境变量指向与ARM一块提供的包含的头文件和源文件的位置,不能更改此环境变量。如果包含其它位置的文件,可根据需要使用-I和-J命令行选项。当从命令行编译时,搜索完由-I选项指定的目录后立即搜索ARMINC指定的目录。如果使用-J,则忽略ARMINC。
下表显示包含的头文件和源文件时,使用怎样的搜索路径。
CP:指当前的工作路径
编译程序选项
|
<include>
|
“include”
|
既非
-I
也非
-J
|
ARMINC
|
CP, ARMINC
|
-J
|
Jdirs
|
CP
和
Jdirs
|
-I
|
Idirs
和
ARMINC
|
CP, Idirs
,
ARMINC
|
既有
-I
又有
-J
|
Jdirs
和
Idirs
|
CP
,
Idirs
和
Jdirs
|
-fd
|
无影响
|
从搜索路径中删除
CP
,使搜索路径与尖括号调用的内容相同
|
-fk
|
无影响
|
使用
Kernighan
和
Ritchie
搜索规则
|
调用ARM编译程序
armcc [PCS-options][source-language][search-paths][preprocessor-options][C++-lanague]
[output-format][target-options][debug-options][code-generation-options][diagnostic-options][warning-options][additional-checks][error-options][source]
选项
|
描述
|
PCS-options
|
使用的程序调用标准
This specifies the procedure call standard to use
|
source-language
|
指定编译程序接受的源语言的变体。编译
C
代码时默认为
ISO C
,编译
C++
代码时默认为
ISO Standard C++
。
|
search-paths
|
指定搜索包含文件的目录
|
preprocessor-options
|
指定预处理程序特征,包括预处理程序输出和宏定义
|
C++-language
|
指定针对
C++
编译的选项
|
output-format
|
指定编译程序输出格式。可使用这些选项生成汇编语言输出列表文件和目标文件
|
target-options
|
指定目标处理器或体系结构
|
debug-options
|
指定是否生成调试表及其格式
|
code-generation-options
|
指定诸如优化、字节顺序和编译程序产生的数据的对齐这些选项
|
diagnostic-options
|
其指定的选项能够控制由编译程序输出的诊断信息
|
warning-options
|
指定是否生成特定的警告信息
|
additional-checks
|
指定若干可应用于代码的其它检查,如检查数据流异常和未使用声明
|
error-options
|
它能够关闭特定可恢复错误,或将特定错误降为警告
|
source
|
提供包含
C
或
C++
源代码的一个或多个文本文件的文件名
|
·
从文件读取编译程序选项
当操作系统限制命令行长度时,可将命令行选项包含于文件中。使用
--via filename
armcpp –-via input.txt source.c
编译程序打开指定文件,并从中读取其它命令行选项。via文件需要一定格式。
· 程序调用标准选项
ARM-Thumb程序调用标准(ATPCS).
-apcs qualifiers
如果要使用-apcs命令行选项:至少要出现一个限定符,限定符之间不能有空格。
如果没有指定—apcs或—cpu选项,默认为:
--apcs /noswst/nointer/noropi/norwpi –fpu softvfp
Interworking qualifiers(交互操作限定符)
/nointerwork 该选项生成没有ARM/Thumb交互操作支持的代码,ARMv5T以下
版本,该选项为默认选项。
/interwork 该选项生成有ARM/Thumb交互操作支持的代码
/**********************
* thumbmain.c *
**********************/
#include
<
stdio.h
>
extern
void
arm_function(
void
);
int
main(
void
)
{
printf("Hello from Thumb World ");
arm_function();
printf("And goodbye from Thumb World ");
return (0);
}
/**********************
* armsub.c *
**********************/
#include
<
stdio.h
>
void
arm_function(
void
)
{
printf("Hello and Goodbye from ARM world ");
}
To compile and link these modules:
1
. Type tcc
-
c
-
apcs
/
interwork
-
o thumbmain.o thumbmain.c at the system prompt to compile the Thumb code
for
interworking.
2
. Type armcc
-
c
-
apcs
/
interwork
-
o armsub.o armsub.c to compile the ARM code
for
interworking.
* thumbmain.c *
**********************/



{
printf("Hello from Thumb World ");
arm_function();
printf("And goodbye from Thumb World ");
return (0);
}
/**********************
* armsub.c *
**********************/


{
printf("Hello and Goodbye from ARM world ");
}




?/noropi 该选型生成非(只读)位置独立代码
?/ropi
?/norwpi
?/rwpi
栈检查限定符
?/noswstackcheck
?/swstackcheck
Setting the source language
根据这些选项,可指定编译程序使用的编程语言,确定编译程序实施该语言的标准和约定的严格程度。默认情况下,C代码编译ISO C代码。编译C++代码的能力等同于ISO/IEC C++。有如下选项:
-ansi
-ansic
-cpp
-embeddedcplusplus
-strict
Specifying search paths
利用这些选项可指定搜索包含头文件的目录
-Idir_name
-fk
-fd
-jdir-list
Setting preprocessor options
The following command-line options control aspects of the preprocessor.这些选项用于控制预处理程序某些方面。
-E
仅执行编译程序的预处理程序阶段。默认情况下,预处理程序的输出发送到
标准输出流,可用UNIX和MS-DOS进行重定向。
armcc –E souce.c > raw.c
默认情况下,-E选项会删除注释。
头文件test.h



源文件test.c
#include
"
test.h
"
/* include header file test.h */
int
sum(
int
a,
int
b)
{
int k = TEST_ONE;
return a + b + k + TEST_TWO; /* add a and b */
}
/* include header file test.h */

{
int k = TEST_ONE;
return a + b + k + TEST_TWO; /* add a and b */
}

-E选项的输出为:







{
int k = 1 ;
return a + b + k + 2 ;
}

-C
预处理程序中保留注释,同-E共同使用时,必须跟在-E后面
-M
仅执行编译程序的预处理阶段,该选项产生所用于make使用程序的
makefile依赖列表。
test.o : test.h
test.o : test.c
而gcc –M的输出为
test.o : test.c test.h
-Dsymbol=value
将symbol定义为预处理程序的宏。同源文件开头#define symbol value具
有相同的作用。
-Dsymbol
将symbol定义为预处理程序宏
-Uname
删除宏name的任何初始定义