编译器命令行选项2.1.5--arm此选项将编译器配置为以ARM指令集为目标。注意此选项不适用于只包含Thumb的处理器(如Cortex-M3)。缺省选项这是支持ARM指令集的目标的缺省选项。另请参阅第2-15页的--cpu=list第2-16页的--cpu=name第2-87页的--thumb第4-50页的#pragmaarm编译器用户指南中第2-21页的指定目标处理器或体系结构2.1.6--asm此选项指示编译器将列表写入编译器所生成的机器代码的反汇编文件中。如果选择此选项,则会生成对象代码。此外,除非选择了-c选项,否则还会执行链接步骤。注意若要在不生成对象代码的情况下对编译器生成的机器代码执行反汇编,请选择-s而不是--asm。2-8ARMDUI0348AC版权所有2007ARMLimited。保留所有权利
编译器命令行选项 2-8 版权所有 © 2007 ARM Limited。保留所有权利。 ARM DUI 0348AC 2.1.5 -arm 此选项将编译器配置为以 ARM 指令集为目标。 注意 此选项不适用于只包含 Thumb 的处理器(如 Cortex-M3)。 缺省选项 这是支持 ARM 指令集的目标的缺省选项。 另请参阅 • 第2-15 页的- - cpu=list • 第2-16 页的- - cpu=name • 第2-87 页的- - thumb • 第4-50 页的#pragma arm • 编译器用户指南中第2-21 页的指定目标处理器或体系结构 2.1.6 -asm 此选项指示编译器将列表写入编译器所生成的机器代码的反汇编文件中。 如果选择此选项,则会生成对象代码。此外,除非选择了 -c 选项,否则还会执行 链接步骤。 注意 若要在不生成对象代码的情况下对编译器生成的机器代码执行反汇编,请选择 -S 而不是 -asm
编译器命令行选项用法-asm的操作以及所生成的反汇编文件的完整名称因所使用的选项组合而异表2-1用--asm选项进行编译操作编译器选项将一个列表写入编译源的反汇编文件。--asm此外,除非使用了c选项,否则还会执行链接步骤。反汇编代码将写入一个文本文件中,该文件的缺省名称为具有文件扩展名.s的输入文件的名称。与--asm类似,但不执行链接步骤。-asm-c与--asm类似,但源代码将与反汇编代码进行交叉存取。--asm --interleave反汇编代码将写入一个文本文件中,其缺省名称为具有文件扩展名.txt的输入文件的名称。与--asm类似,但编译器将为合并到主文件中的文件生成空目-asm--multifile标文件。与--asm类似,但目标文件将命名为filename。asm-o filename反汇编代码将写入文件filename.s中。目标文件的名称中不能包含文件扩展名.5。如果目标文件的文件扩展名为.s,则会将反汇编代码写入目标文件的最上方。这可能会导致不可预知的结果。另请参阅第2-13页的-c.第2-51页的--interleave第2-64页的--[no_]multifile第2-66页的-ofilename.第2-80页的-S编译器用户指南中第2-11页的文件命名约定。ARMDUI0348AC2-9版权所有2007ARMLimited。保留所有权利
编译器命令行选项 ARM DUI 0348AC 版权所有 © 2007 ARM Limited。保留所有权利。 2-9 用法 -asm 的操作以及所生成的反汇编文件的完整名称因所使用的选项组合而异: 另请参阅 • 第2-13 页的- c • 第2-51 页的- - interleave • 第2-64 页的- -[no_]multifile • 第2-66 页的- o filename • 第2-80 页的- S • 编译器用户指南中第2-11 页的文件命名约定。 表2-1 用 -asm 选项进行编译 编译器选项 操作 - - asm 将一个列表写入编译源的反汇编文件。 此外,除非使用了 c 选项,否则还会执行链接步骤。 反汇编代码将写入一个文本文件中,该文件的缺省名称为具有 文件扩展名 .s 的输入文件的名称。 -asm -c 与 -asm 类似,但不执行链接步骤。 - - asm -interleave 与 -asm 类似,但源代码将与反汇编代码进行交叉存取。 反汇编代码将写入一个文本文件中,其缺省名称为具有文件扩 展名 .txt 的输入文件的名称。 -asm -multifile 与 -asm 类似,但编译器将为合并到主文件中的文件生成空目 标文件。 -asm -o filename 与 -asm 类似,但目标文件将命名为 filename。 反汇编代码将写入文件 filename.s 中。 目标文件的名称中不能包含文件扩展名 .s。如果目标文件的 文件扩展名为 .s,则会将反汇编代码写入目标文件的最上方。 这可能会导致不可预知的结果
编译器命令行选项2.1.7--[no_]autoinline此选项启用或禁用函数的自动内联。编译器会在需要时自动内联函数。-Ospace和-Otime选项以及其他某些因素(如函数大小)会对编译器自动内联函数的方式产生影响。通过选择-Otime并结合各种其他因素,会增加内联函数的可能性。缺省选项对于优化级别-00和-01,缺省为--no_autoinline。对于优化级别-02和-03,缺省为--autoin1ine。另请参阅第2-40页的--forceinline第2-50页的--[no_Jinline第2-67页的-Onum-第2-69页的-Ospace第2-70页的-Otime2.1.8--bigend此选项指示编译器使用大端内存为ARM处理器生成代码。ARMv6支持以下两种不同的大端模式BE8ARMv6字节固定寻址模式。BE32旧大端模式。在链接时指定是选择BE8还是BE32。缺省选项除非显式指定--bigend,否则编译器将采用--1ittleend。另请参阅第2-58页的--littleend.编译器用户指南中第4-41页的端支持链接器指南中第2-25页的指定字节寻址模式2-10ARMDUI0348AC版权所有2007ARMLimited。保留所有权利
编译器命令行选项 2-10 版权所有 © 2007 ARM Limited。保留所有权利。 ARM DUI 0348AC 2.1.7 -[no_]autoinline 此选项启用或禁用函数的自动内联。 编译器会在需要时自动内联函数。 -Ospace 和 -Otime 选项以及其他某些因素(如 函数大小)会对编译器自动内联函数的方式产生影响。 通过选择 -Otime 并结合各种其他因素,会增加内联函数的可能性。 缺省选项 对于优化级别 -O0 和 -O1,缺省为 -no_autoinline。 对于优化级别 -O2 和 -O3,缺省为 -autoinline。 另请参阅 • 第2-40 页的- - forceinline • 第2-50 页的- -[no_]inline • 第2-67 页的- Onum • 第2-69 页的- Ospace • 第2-70 页的- Otime 2.1.8 -bigend 此选项指示编译器使用大端内存为 ARM 处理器生成代码。 ARMv6 支持以下两种不同的大端模式: BE8 ARMv6 字节固定寻址模式。 BE32 旧大端模式。 在链接时指定是选择 BE8 还是 BE32。 缺省选项 除非显式指定 -bigend,否则编译器将采用 -littleend。 另请参阅 • 第2-58 页的- - littleend • 编译器用户指南中第4-41 页的端支持 • 链接器指南中第2-25 页的指定字节寻址模式
编译器命令行选项2.1.9--[no_]brief_diagnostics此选项允许或禁止输出编译器所生成的简短诊断消息。如果启用此选项,则不显示原始源代码行,并且当错误消息文本太长而在一行放不下时也不换行。缺省选项缺省为--no_brief_diagnostics。示例/*main.c*/#include<stdio.h>int main(void)tprintf("e1lo,world\n");return o;7用--brief_diagnostics选项编译此代码时会生成一条警告消息。另请参阅.第2-26页的--diag_error=tagl.tag....]第2-27页的--diag_remark=tagl,tag...]*.第2-28页的--diag_style={arm|idelgnu)第2-29页的--diag_suppress=tagl,tag...].第2-30页的--diag_warming=tagl.tag...].第2-34页的--errors=filename第2-79页的--remarks.第2-95页的-W第2-97页的--[no_]wrap_diagnostics.编译器用户指南中的第5章诊断消息。ARMDUI0348AC2-11版权所有2007ARMLimited。保留所有权利
编译器命令行选项 ARM DUI 0348AC 版权所有 © 2007 ARM Limited。保留所有权利。 2-11 2.1.9 -[no_]brief_diagnostics 此选项允许或禁止输出编译器所生成的简短诊断消息。 如果启用此选项,则不显示原始源代码行,并且当错误消息文本太长而在一行放 不下时也不换行。 缺省选项 缺省为 -no_brief_diagnostics。 示例 /* main.c */ #include <stdio.h> int main(void) { printf("揌ello, world\n"); return 0; } 用 -brief_diagnostics 选项编译此代码时会生成一条警告消息。 另请参阅 • 第2-26 页的- - diag_error=tag[,tag,.] • 第2-27 页的- - diag_remark=tag[,tag,. ] • 第2-28 页的- - diag_style={arm|ide|gnu} • 第2-29 页的- - diag_suppress=tag[,tag,.] • 第2-30 页的- - diag_warning=tag[,tag,.] • 第2-34 页的- - errors=filename • 第2-79 页的- -remarks • 第2-95 页的- W • 第2-97 页的- -[no_]wrap_diagnostics • 编译器用户指南中的第 5 章 诊断消息
编译器命令行选项2.1.10--bss_threshold=num此选项控制小型全局ZI数据项在节中的放置。小型全局ZI数据项是小于或等于八字节的未初始化数据项。语法--bss_threshold=num其中是下列值之一num0将小型全局ZI数据项放在ZI数据节中8将小型全局ZI数据项放在RW数据节中。缺省选项如果未指定--bss_thresho1d选项,编译器将采用--bss_threshold=8。用法在RVCT的当前版本中,编译器可在优化时将小型全局ZI数据项放置在RW数据节中。在RVCT2.0.1及更低版本中,缺省情况下会将小型全局ZI数据项放置在ZI数据节中。使用此选项可模拟RVCT2.0.1及更低版本中与小型全局ZI数据项在ZI数据节中的放置有关的行为。注意选择--bss_thresho1d=0选项时,可指示编译器将所有小型全局ZI数据项放置在ZI数据节的当前编译模块中。若要将特定变量放置在某一ZI数据节中,请使用_attribute_((zero_init))特定的ZI数据节中,请组合使用_attribute((section))和_attribute_((zero_init))。示例intglob1,glob2;/*ZI (.bss)inRVCT2.0.1and earlier*//*Rw(.data)inRVCT2.1andlater*用--bss_threshold=0编译此代码时,会将glob1和glob2放置在ZI数据节中。2-12ARMDUI0348AC版权所有2007ARMLimited。保留所有权利
编译器命令行选项 2-12 版权所有 © 2007 ARM Limited。保留所有权利。 ARM DUI 0348AC 2.1.10 -bss_threshold=num 此选项控制小型全局 ZI 数据项在节中的放置。小型全局 ZI 数据项 是小于或等 于八字节的未初始化数据项。 语法 -bss_threshold=num 其中: num 是下列值之一: 0 将小型全局 ZI 数据项放在 ZI 数据节中 8 将小型全局 ZI 数据项放在 RW 数据节中。 缺省选项 如果未指定 -bss_threshold 选项,编译器将采用 -bss_threshold=8。 用法 在 RVCT 的当前版本中,编译器可在优化时将小型全局 ZI 数据项放置在 RW 数 据节中。在 RVCT 2.0.1 及更低版本中,缺省情况下会将小型全局 ZI 数据项放置 在 ZI 数据节中。 使用此选项可模拟 RVCT 2.0.1 及更低版本中与小型全局 ZI 数据项在 ZI 数据节 中的放置有关的行为。 注意 选择 -bss_threshold=0 选项时,可指示编译器将所有 小型全局 ZI 数据项放置在 ZI 数据节的当前编译模块中。若要将特定变量放置在: • 某一 ZI 数据节中,请使用 _attribute_((zero_init)) • 特定的 ZI 数据节中,请组合使用 _attribute((section))_ 和 _attribute_((zero_init))。 示例 int glob1, glob2; /* ZI (.bss) in RVCT 2.0.1 and earlier */ /* RW (.data) in RVCT 2.1 and later */ 用 -bss_threshold=0 编译此代码时,会将 glob1 和 glob2 放置在 ZI 数据节中