本文由博主译自《SYS/BIOS(TI-RTOS Kernel) v6.46 User’s Guide》,
TEXAS INSTRUMENTS,文献编号:SPRUEX3Q,2016年6月,P44-45。
内容以原文为准,转载或拷贝需标明本网址的链接。
2.4.5 优化编译器和链接器
你可以优化应用程序的性能和代码量,或者在你使用不同的方法编译和链接应用程序时,给出更多的调试信息。例如,你可以在链接SYS/BIOS库不同的编译版本时,做这些事情。
在下列位置,你可以选择与编译器和链接器相关的优化选项:
- Build-Profile(构建轮廓)。当你创建一个新的 CCS 工程或者修改 CCS 的General设置时,可以看见这个字段。译者插入下图。我们推荐使用 "release"(发布)设置。即使在你创建和调试应用程序时, 也应该优先选择"release"选项。 "debug"选项主要是给德州仪器内部使用的。 "release"选项产生的结果有点近似可执行但仍然可以调试。这个构建轮廓主要影响如何构建编解码引擎和一些器件的驱动程序。
-
________________________________________________________________
注: "whole_program"和"whole_program_debug"选项在Build-Profile中已经被弃用,不会支持更长时间。与这个选项产生的结果最近似的方法是在BIOS.LibType_Custom里设置BIOS.libType配置参数。
_______________________________________________________________
- Configuration(配置)。这个位于属性对话框的下拉字段,允许你选择、定制多种构建配置。在每种配置里都可以选择编译器和链接器的设置。在缺省配置中,Debug(调试)和Release(发布)是有效的选项。译者插入下图。
- BIOS.libType 配置参数。你可以在 XGCONF 里设置这个参数,或者在你的工程里编辑 *.cfg 文件。这个参数让你在几个 SYS/BIOS 库的定制版本里选择,该库是基于应用程序的需要构建的。见下表,后面将详细讨论。
BIOS.libType配置参数的选项如下:
对于全部的libType选项,创建的可执行文件仅包含应用程序需要访问的模块和编程接口。如果在你的*.cfg文件或C代码里没有使用某个特殊模块(即SYS/BIOS模块内部不需要该模块),则该模块不会链接到你的应用程序中。构建的链接过程中,不需要(直接或间接)的编程接口函数被排除在外。
- 仪表化。(缺省)这个选项在构建SYS/BIOS库时,使能全部的断言和日志。你的配置文件还可以使能或禁止各种诊断和有关的日志设置。然而,在输出记录(Log)事件之前,总是在检查是否使能了诊断(Diags),即使你使用了 ALWAYS_ON 或 ALWAYS_OFF 设置,这也会影响性能。使用这个选项,在某些目标上会导致代码量太大,例如C28x 和 MSP430。
-
- 非仪表化。这个选项在构建 SYS/BIOS 库时,禁止全部的断言和日志。不检查断言和诊断设置,日志信息在运行时无效。对断言和诊断的检查不编译在库里,这样就优化了运行时的性能和代码量。与记录事件相比,可以采用其它的方法进行 Error_Blocks 的检查和错误处理。
-
- 定制(已优化)。这个选项按用户配置构建 SYS/BIOS 库。该选项按应用的要求优化到最好的运行时性能和代码量。不论应用配置的仪表化到什么程度,仪表化都是有效的。这样的构建结果提供了足够的调试信息,而且仍然可以在 CCS 中单步通过(step through)优化的代码并定位全局变量。
-
- 调试(非优化)。这个选项按用户配置构建 SYS/BIOS 库,但是没有使能优化,全部的调试信息都嵌入在库里。应用程序完全可调试。可以通过 SYS/BIOS 的编程接口步入( step into)代码。因为没有优化,所以与定制 libType 相比,代码量较大且运行时性能较低。
-
除了调试选项外的全部libType选项,使用了主动的程序优化,,从最终的可执行映像里移除了许多初始化常量和小的代码碎片(经常"glue"代码)。这样的典型优化使用了常量合并和函数嵌入,包括跨越模块界限。
第一次构建一个工程时,由于经过 SYS/BIOS 库的构建过程,所以需要较长的时间。这个库被存储在工程的 "src" 目录里。后来的构建过程可能会快一些。如果你没有改变影响构建设置的配置参数并且没有增加在先前的配置里未使用到的模块,则不需要重新构建库。
下列例子语句设置了 BIOS.libType配置参数:
————————————————————————————
var BIOS = xdc.useModule('ti.sysbios.BIOS');
BIOS.libType = BIOS.LibType_Custom;
————————————————————————————
如果在 BIOS.libType 使用了 BIOS.LibType_Custom 或 BIOS.LibType_Debug 选项,你也能在定制的C编译器命令行选项里设置 BIOS.customCCOpts 参数来编译 SYS/BIOS库。如果你想改变这个参数,一定要先检查和明白用于你的目标的编译 SYS/BIOS 库的默认命令行选项是什么。你在 XGCONF 里能看见缺省选项,也可以在你的配置脚本里放入下述语句然后构建工程:
————————————————————————————
print("customCCOpts =", BIOS.customCCOpts);
————————————————————————————
你必须小心,当你修改 BIOS.customCCOpts 参数时不能引起 SYS/BIOS 编译问题。例如,必需要有 --program_level_compile选项。(在编译器命令行,要用到一些--define和--include_path选项,但它们没有在customCCOpts定义中列出,这些也是不能移除的)
例如,用下列字符串你可以从 BIOS.customCCOpts 定义中移除 -o3 选项,对 C64x+ 目标创建一个可调试的定制库:
——————————————————————————————————
BIOS.customCCOpts = "-mv64p --abi=eabi -q -mi10 -mo -pdr -pden -pds=238 -pds=880 -pds1110 --program_level_compile -g";
——————————————————————————————————
在 TI 嵌入式处理器 wik i网站的 SYS/BIOS常见问题提供了关于配置 BIOS.libType 和 BIOS.customCCOpts 参数的更多信息。如何手动重建 SYS/BIOS 的信息见附录A。