【php精品源码栏目提醒】:本文主要为网学会员提供“ARM 集成环境使用doc - 软件工程”,希望对需要ARM 集成环境使用doc - 软件工程网友有所帮助,学习一下!
ARM ADS1.2集成环境使用第8章ARM ADS 集成开发环境的使用在 这 一 章 里 , 将 介 绍 ARM 开 发 软 件 ADSARM Developer Suite 。
通 过 学 习 如 何 在CodeWarrior IDE 集成开发环境下编写,编译一个工程的例子,使读者能够掌握在 ADS 软件 平台下开发用户应用程序。
本章还描述了如何使用 AXD 调试工程,使读者对于调试工程有 个初步的理解,为进一步的使用和掌握调试工具起到抛砖引玉的作用。
本章主要内容有:- ADS 软件组成介绍 - 使用 ADS 创建工程 - 用 AXD 进行代码调试8.1ADS 集成开发环境组成介绍ARM ADS 全称为 ARM Developer Suite。
是 ARM 公司推出的新一代 ARM 集成开发工 具。
现在 ADS 的最新版本是 1.2,它取代了早期的 ADS1.1 和 ADS1.0。
它除了可以安装在Windows NT4, Windows 2000, Windows 98 和 Windows 95 操作系统下, 还支持 WindowsXP 和 Windows Me 操作系统。
ADS 由命令行开发工具,ARM 时实库,GUI 开发环境CodeWarrior 和 AXD,实用程 序和支持软件组成。
有了这些部件, 用户就可以为 ARM 系列的 RISC 处理器编写和调试自 己的开发应用程序了。
下面就详细介绍一下 ADS 的各个组成部分。
8.1.1 命令行开发工具这些工具完成将源代码编译,链接成可执行代码的功能。
ADS 提供下面的命令行开发工具:armcc armcc 是 ARM C 编译器。
这个编译器通过了 Plum Hall C Validation Suite 为 ANSIC 的 一致性测试。
armcc 用于将用 ANSI C 编写的程序编译成 32 位 ARM 指令代码。
因为 armcc 是我们最常用的编译器,所以对此作一个详细的介绍。
在命令控制台环境下,输入命令: armcc –help 可以查看 armcc 的语法格式以及最常用的一些操作选项 armcc 最基本的用法为: armcc options file1 file2 ... filen 这里的 option 是编译器所需要的选项,fiel1file2…filen 是相关的文件名。
这里简单介绍一些最常用的操作选项。
-c:表示只进行编译不链接文件; -C:注意:这是大写的 C禁止预编译器将注释行移走;-Dltsymbolgt:定义预处理宏,相当于在源程序开头使用了宏定义语句define symbol , 这里 symbol 默认为 1; -E:仅仅是对 C 源代码进行预处理就停止;ARM 应用系统开发详解——基于 S3C4510B 的系统设计-gltoptionsgt:指定是否在生成的目标文件中包含调试信息表; -Iltdirectorygt : 将directory 所 指 的 路 径 添 加 到 include 的 搜 索 路 径 列 表 中 去 ; 用-Jltdirectorygt: directory 所指的路径代替默认的对include 的搜索路径; -oltfilegt:指定编译器最终生成的输出文件名。
-O0:不优化; -O1:这是控制代码优化的编译选项,大写字母 O 后面跟的数字不同,表示的优化级别 就不同,-O1 关闭了影响调试结果的优化功能; -O2:该优化级别提供了最大的优化功能; -S:对源程序进行预处理和编译,自动生成汇编文件而不是目标文件; -Ultsymbolgt:取消预处理宏名,相当于在源文件开头,使用语句undef symbol -Wltoptionsgt:关闭所有的或被选择的警告信息; 有关更详细的选项说明,读者可查看 ADS 软件的在线帮助文件。
armcpp armcpp 是 ARM C编译器。
它将ISO C 或 EC 编译成 32 位 ARM 指令代码。
tcc tcc 是 Thumb C 编译器。
该编译器通过了 Plum Hall C Validation Suite 为 ANSI 一致性 的测试。
tcc 将 ANSI C 源代码编译成 16 位的 Thumb 指令代码。
tcpp tcpp 是 Thumb C 编译器。
它将 ISO C 和EC
源码编译成 16 位 Thumb 指令代 码。
armasm armasm 是 ARM 和 Thumb 的汇编器.它对用 ARM 汇编语言和 Thumb 汇编语言写的源 代码进行汇编。
armlink armlink 是 ARM连接器。
该命令既可以将编译得到的一个或多个目标文件和相关的一 个或多个库文件进行链接, 生成一个可执行文件, 也可以将多个目标文件部分链接成一个目 标文件,以供进一步的链接。
ARM 链接器生成的是 ELF 格式的可执行映像文件。
armsd armsd 是 ARM 和Thumb 的符号调试器。
它能够进行
源码级的程序调试。
用户可以在 用 C 或汇编语言写的代码中进行单步调试,设置断点,查看变量值和内存单元的内容。
8.1.1.1armcc 用法详解下 面 为 读 者 介 绍 上 述 的 4 种 ARM C 和 C 编 译 器 的 命 令 通 用 语 法 。
compilerPCS-options source-language search-paths preprocessor-optionsoutput-format target-options debug-options code-generation-optionswarning-options additional-checks error-options source 用户可以通过命令行操作选项控制编译器的执行。
有 所有的选项都是以符号”-”开始, 些选项后面还跟有参数。
在大多数情况下,ARM C 和 C编译器允许在选项和参数之间存 在空格。
命令行中各个选项出现顺序可以任意。
这里的 compiler 是指 armcc,tcc, armcpp 和 tcpp 中的一个; PCS-options:指定了要使用的过程调用标准; source-language:指定了编译器可以接受的编写源程序的语言种类。
对于 C 编译器默认 的语言是 ANSI C,对于 C编译器默认是 ISO 标准 C; search-paths:该选项指定了对包含的文件包括源文件和头文件的搜索路径;ARM 应用系统开发详解——基于 S3C4510B 的系统设计preprocessor-options:该选项指定了预处理器的行为,其中包括预处理器的输出和宏定 义等特性; output-format:该选项指定了编译器的输出格式,可以使用该项生成汇编语言输出列表 文件和目标文件; target-options:该选项指定目标处理器或 ARM 体系结构;debug-options: 该选项指 定调 试信息 表是 否生成 ,和 该调试 信息 表生成 时的 格式 ;code-generation-options:该选项指定了例如优化,字节顺序和由编译器产生的数据对齐格式等选项; warning-options:该选项决定警告信息是否产生; additional-checks:该选项指定了几个能用于
源码的附加检查,例如检查数据流异常, 检查没有使用的声明等;error-options:该选项可以关闭指定的可恢复的错误,或者将一些指定的错误降级为警 告;source:该选项提供了包含有 C 或 C源代码的一个或多个文件名,默认的,编译器在 当前路径寻找源文件和创建输出文件。
如果源文件是用汇编语言编写的也就是说该文件的 文件名是以.s 作为扩展名,汇编器将被调用来处理这些源文件。
如果操作系统对命令行的长度有限制, 可以使用下面的操作, 从文件中读取另外的命令 行选项: -via filename 该命令打开文件名为 filename 的文件,并从中读取命令行选项。
用户可以对-via 进行嵌 套调用,亦即,在文件 filename 中又通过-via finlename2 包含了另外一个文件。
在下面 从的例子中, input.txt 文件中读取指定的选项,作为 armcpp 的操作选项: armcpp -viainput.txt source.c 以上是对编译器选项的一个简单概述。
它们包括后面还要介绍的其他一些命令工具既 可以在命令控制台环境下使用,同时由于它们被嵌入到了 ADS 的图形界面中,所以也可以 在图形界面下使用。
8.1.1.2armlink 用法详解在介绍 armlink 的使用方法之前,先介绍要涉及到的一些术语。
映像文件image:是指一个可执行文件,在执行的时候被加载到处理器中。
一个映像 文件有多个线程。
它是ELFExecutable and linking format格式的。
段Section:描述映像文件的代码或数据块 。
RO : 是 Read-only 的 简 写 形 式 。
RW : 是 Read-write. 的 简 写 形 式 。
ZI : 是Zero-initialized 的简写形式。
输入段input section:它包含着代码,初始化数据或描述了在应用程序运行之前必须要 初始化为 0 的一段内存。
输出段output section:它包含了一系列具有相同的 RO,RW 或 ZI 属性的输入段。
域Regions:在一个映像文件中,一个域包含了 1 至 3 个输出段。
多个域组织在一起, 就构成了最终的映像文件。
ReadOnly Position IndependentROPI: 它是指一个段, 在这个段中代码和只读数据的地 址在运行时候可以改变。
Read Write Position IndependentRWPI:它是指一个段,在该段中的可读/写的数据地址 在运行期间可以改变。
加载时地址:是指映像文件位于存储器在该映像文件没有运行时中的地址。
ARM 应用系统开发详解——基于 S3C4510B 的系统设计运行时地址:是指映像文件在运行时的地址。
下面介绍一下 armlink 命令的语法 完整的连接器命令语法如下: armlink -help -vsn -partial -output file -elf-reloc-ro-base address -ropi -rw-base address -rwpi -split -scatterfile-debug-nodebug-removeRO/RW/ZI/DBG-noremove -entry location -keepsection-id -first section-id -last section-id -libpath pathlist-scanlib-noscanlib -locals-nolocals -callgraph -info topics -map-symbols -symdefs file -edit file -xref -xreffrom objectsection-xrefto objectsection -errors file -list file -verbose -unmangled-mangled -match crossmangled-via file -strict -unresolvedsymbol-MI-LI-BI input-file-list 上面各选项的含义分别为: -help 这个选项会列出在命令行中常用的一些选项操作。
-vsn 这个选项显示出所用的 armlink 的版本信息。
-partial 用这个选项创建的是部分链接的目标文件而不是可执行映像文件。
-output file这个选项指定了输出文件名,该文件可能是部分链接的目标文件,也可能是可执行映像 文件。
如果输出文件名没有特别指定的话,armlink 将使用下面的默认: 如果输出是一个可执行映像文件,则生成的输出文件名为__image.axf;如果输出是一个部分链接的目标文件,在生成的文件名为__object.o; 如果没有指定输出文件的路径信息, 则输出文件就在当前目录下生成。
如果指定了路径 信息,则所指定的路径成为输出文件的当前路径。
-elf 这个选项生成 ELF 格式的映像文件,这也是 armlink 所支持的唯一的一种输出格式,这 是默认选项。
-reloc 这个选项生成可重定址的映像。
一个可重定址的映像具有动态的段,这个段中包含可重定址信息, 利用这些信息可以在 链接后,进行映像文件的重新定址;-reloc,-rw-base 一起使用,但是如果没有-split 选项,链接时会产生错误。
-ro-baseaddress 这个选项将包含有 RORead-Only 属性输出段的加载地址和运行地址设置为address, 该地址必须是字对齐的,如果没有指定这个选项,则默认的 RO 基地址值为0x8000。
-ropi 这个选项使得包含有 RO 输出段的加载域和运行域是位置无关的。
如果该选项没有使 用,则相应的域被标记为绝对的。
通常每一个只读属性的输入段必须是只读位置无关的。
如 果使用了这个选项,armlink 将会进行以下操作: 检查各段之间的重定址是否有效; 确保任何由 armlink 自身生成的代码是只读位置无关的。
这里希望读者注意的是,ARM 工具直到 armlink 完成了对输入段的处理后,才能够决 定最终的生成映像是否为只读位置无关的。
这就意味着 ,即使为编译器和汇编器指定了ARM 应用系统开发详解——基于 S3C4510B 的系统设计ROPI 选项,armlink 也可能会产生 ROPI 错误信息。
-rw-base address 这个选项设置包含 RWRead/Write 属性输出段的域的运行时地址,该地址必须是字对 齐的。
如果这个选项和-split 选项一起使用,将设置包含 RW 输出段的域的加载和运行时地址 都设置在address 处。
-rwpi 这个选项使得包含有 RW 和 ZIZero Initialization, 初始化为 0属性的输出段的加载和运 行时域为位置无关的。
如果该选项没有使用,相应域标记为绝对的。
这个选项要求-rw-base 选项后有值,如果 -rw-base 没有指定的话,默认其值为 0,即相当于-rw-base 0。
通常每一个 可写的输入段必须是可读/ 可写的位置无关的。
如果使用了该选项,armlink 会进行以下的操作: 检查可读/可写属性的运行域的输入段是否设置了位置无关属性; 检查在各段之间的重定址是否有效; 生成基于静态寄存器 sb 的条目,这些在 RO 和 RW 域被拷贝和初始化的时候会用到。
编译器并不会强制可写的数据一定要为位置无关的, 这就是说, 即使在为编译器和汇编 器指定了 RWPI 选项,armlink 也可能生成数据不是 RWPI 的信息。
-split 这个选项将包含 RO 和 RW 属性的输出段的加载域,分割成 2 个加载域。
一个是包含 RO 输出段的加载域,默认的加载地址为 0x8000,但是可以用-ro-base 选项设置其他的地址 值,另一个加载域包含 RO 属性的输出段,由-rw-base选项指定加载地址,如果没有使用 -rw-base 选项的话,默认使用的是-rw-base 0。
-scatter file 这个选项使用在 file 中包含的分组和定位信息来创建映像内存映射。
注意 , 如 果 使 用 了 该 选 项 的 话 , 必 须 要 重 新 实 现 堆 栈 初 始 化 函 数__user_initial_stackheap。
-debug 这个选项使输出文件包含调试信息,调试信息包括,调试输入段,符号和字符串表。
这 是默认的选项。
-nodebug 这个选项使得在输出文件中不包含调试信息。
生成的映像文件短小, 但是不能进行
源码 级的调试。
armlink 对在输入的目标文件和库函数中发现的任何调试输入段都不予处理,当 加载映像文件到调试器中的时候, 也不包含符号和字符串信息表。
这个选项仅仅是对装载到 调试器的映像文件的大小有影响, 但是对要下载到目标板上的二进制代码的大小没有任何影 响。
如果用armlink 进行部分链接生成目标文件而不是映像文件,则虽然在生成的目标文件 中不含有调试输入段,但是会包含符号和字符串信息表。
这里特别请读者注意的是: 如果要在链接完成后使用 fromELF 工具的话,不可使用-nodebug 选项,这是因为如果 生成的映像文件中不包含调试信息的话,则有下面的影响: fromELF 不能将映像文件转换成其他格式的文件; fromELF 不能生成有意义的反汇编列表。
-remove RO/RW/ZI/DBG 使用这个选项会将在输入段未使用的段从映像文件中删除。
如果输入段中含有映像文件ARM 应用系统开发详解——基于 S3C4510B 的系统设计入口点或者该输入段被一个使用的段所引用,则这样的输入段会当作已使用的段。
在使用这个选项时候要注意,不要删除异常处理函数。
使用-keep 选项来标识异常处理 函数,或用 ENTRY 伪指令标明是入口点。
为了更精确的控制删除未使用的段, 可以使用段属性限制符。
可以使用以下的段属性限 制符: RO 删除所有未使用的 RO 属性的段; RW 删除所有未使用的 RW 属性的段; ZI 删除所有未使用的 ZI 属性的段; DBG 删除所有未使用的DEBUG 属性的段。
这些限制符出现的顺序是任意的,但是它们必须要有” ”括住,多个限制符之间要用符 号”/”进行间隔。
ADS 软件中默认选项是-remove RO/RW/ZI/DBG。
如果 没 有 指 定 段 属 性 限 制 符 , 则 所 有 未 使 用 的 段 都 会 被 删 除 。
因 为 -remove 就 等 价 于-removeRO/RW/ZI/DBG选项。
-noremove 这个选项保留映像文件中所有未被使用的段。
-entry location 这个选项指定映像文件中唯一的初始化入口点。
一个映像文件可以包含多个入口点, 使 用这个命令定义的初始化入口点是存放在可执行文件的头部, 以供加载程序加载时使用。
当 一个映像文件被装载时,ARM 调试器使用这个入口点地址来初始化 PC指针。
初始化入口 点必须满足下面的条件: 映像文件的入口点必须位于运行域内; 运行域必须是非覆盖的,并且必须是固定域就是说,加载域和运行域的地址相同。
在这里可以用以下的参数代替 location 参数: 1. 入口点地址:这是一个数值,例如-entry 0x0;2. 符 号 : 该 选 项 指 定 映像 文 件 的 入 口 点 为 该 符号 所 代 表 的 地 址 处 , 比如 : -entryint_handler 表示程序入口点在符号 int_handler 所在处。
如果该符号有多处定义存在,armlink 将产生出错信息。
offsetobjectsection: 该选项指定在某个目标文件的段的内部的某个偏移量处为映像文 件的入口地址,例如: -entry 8startupstartupseg 如果偏移量值为 0,可以简写成 objectsection,如果输入段只有一个,则可以简化为object。
-keep section-id 使用该选项,可以指定保留一个输入段,这样的话,即使该输入段没有在映像文件中使 用,也不会被删除。
参数 section-id 取下面一些格式:1. symbol 该选项指定定义 symbol 的输入段不会在删除未使用的段时被删除。
如果映像文件中有 多处 symbol 定义存在,则所有包含 symbol 定义的输入段都不会被删除。
例如:-keep int_handlerARM 应用系统开发详解——基于 S3C4510B 的系统设计则所有定义 int_handler 的符号的段都会保留,而不被删除。
为了保留所有含有以_handler 结尾的符号的段,可以使用如下的选项: -keep _handler 2. objectsection这个选项指定了在删除未使用段时,保留目标文件中的 section 段。
输入段和目标名是 不区 分大 小写的 ,例 如,为 了在 目标文 件 vectors.o 中 保留 vect 段,使 用: -keepvectors.ovect 为了保留 vectors.o 中的所有以 vec 开头的段名,可以使用选项:-keep vectors.ovec 3. object 这个选项指定在删除未使用段时, 保留该目标文件唯一的输入段。
目标名是不区分大小 写的,如果使用这个选项的时候,目标文件中所含的输入段不止一个的话,armlink 会 给出出错信息。
比如,为了保留每一个以 dsp 开头的只含有唯一输入段的目标文件,可 以使用如下的选项: -keep dsp.o -first section-id 这个选项将被选择的输入段放在运行域的开始。
通过该选项, 将包含复位和中断向量地 址的段放置在映像文件的开始,可以用下面的参数代替 section-id: 1.symbol 选择定义symbol 的段。
禁止指定在多处定义的 symbol,因为多个段不能同时放在映像 文件的开始。
2.objectsection 从目标文件中选择段放在映像文件的开始位置。
在目标文件和括号之间不允许存在空 格,例如 -first init.oinit 3.object 选择只有一个输入段的目标文件。
如果这个目标文件包含多个输入段,armlink 会产生 错误信息。
用这个选项的例子如下: -first init.o 这里希望读者注意的是: 使用-first 不能改变在域中按照 RO 段放在开始,接着放置 RW 段,最后放置 ZI 段的基 本属性排放顺序。
如果一个域含有 RO 段,则 RW 或 ZI 段就不能放在映像文件的开头。
类 似地,如果一个域有 RO 或 RW 段,则 ZI段就不能放在文件开头。
两个不同的段不能放在同一个运行时域的开头, 所以使用该选项的时候只允许将一个段 放在映像文件的开头。
-last section-id 这个选项将所选择的输入段放在运行域的最后。
例如, 用这个选项能够强制性的将包含 校验和的输入段放置在RW 段的最后。
使用下面的参数可以替换 section-id。
1. symbol 选择定义 symbol 的段放置在运行域的最后。
不能指定一个有多处定义的 symbol。
使用 该参数的例子如下:-lastchecksum 2. objectsection 从目标文件中选择 section 段。
在目标文件和后面的括号间不能有空格,用该参数的例ARM 应用系统开发详解——基于 S3C4510B 的系统设计子为: -last checksum.ocheck 3. object 选择只有一个输入段的目标,如果该目标文件中有多个输入段,armlink 会给出出错信 息。
和-first 选项一样,需要读者注意的是使用-last 选项不能改变在域中将 RO 段放在开始,接着放置 RW 段,最后放置 ZI 段的 输出段基本的排放顺序。
如果一个域含有 ZI 段,则 RW 段不能放在最后,如果一个域含有 RW或 ZI 段,则 RO 段不能放在最后。
在同一个运行域中,两个不同的段不能同时放在域的最后位置。
-libpath pathlist 这个选项为 ARM 标准的 C 和 C库指定了搜索路径列表。
注意,这个选项不会影响对用户库的搜索路径。
这个选项覆盖了环境变量 ARMLIB 所指定的路径。
参数 pathlist 是一个以逗号分开的多 个路径列表,即为 path1 path2...pathn,这个路径列表只是用来搜索要用到的 ARM 库函数。
默认的,对于包含 ARM 库函数的默认路径是由环境变量 ARMLIB 所指定的。
-scanlib 这个选项启动对默认库标准 ARMC 和 C库的扫描以解析引用的符号。
这个选项是 默认的设置。
-noscanlib 该选项禁止在链接时候扫描默认的库。
-locals 这个选项指导链接器在生成一个可执行映像文件的时候, 将本地符号添加到输出符号信 息表中。
该选项是默认设置。
-nolocals 这个选项指导链接器在生成一个可执行映像文件的时候, 不要将本地符号添加到输出符 号信息表中。
如果想减小输出符号表的大小,可以使用该选项。
-callgraph 该选项创建一个 HTML 格式的静态函数调用图。
这个调用图给出了.
上一篇:
网络聊天工具_论文
下一篇:
浅析普外科围手术期抗菌药物的应用