本节记录了一些常用的编译器选项。如需详细了解如何使用编译器,请参阅 TMS320C28x 优化 C/C++ 编译器用户指南中的第 2 章“使用 C/C++ 编译器”。

2.3.1.ABI

ABI 是通过 –abi 选项选择的,如下所示:

  • COFF ABI (--abi=coffabi)。这是默认设置。
  • EABI (--abi=eabi)。使用此选项可选择 C28x 嵌入式应用程序二进制接口 (EABI)。

如需了解详情,请参阅应用程序二进制接口 (ABI) 一节。

2.3.2.启用 FPU

在受支持的 C28x CPU 上,使用 --float_support[=fpu32|fpu64] 启用 32 位或 64 位硬件浮点支持。仅当使用 EABI 时才支持 FPU64。

注释

即使应用程序不使用浮点,启用 FPU 也是有益的。这使编译器能够利用诸如 RepeatBlock(RPTB) 之类的指令来显著减少某些环路中的分支开销。

2.3.3.启用 TMU

在受支持的 C28x CPU 上,使用 ----tmu_support[=tmu0|tmu1] 启用对三角函数加速器 (TMU) 的支持。使用此选项会自动启用 FPU 支持(与 --float_support=fpu32 选项一样)。当启用 TMU 支持时,可使用内在函数在 TMU 上执行三角函数指令。在宽松浮点模式下,RTS 库调用将替换为用于以下浮点运算的相应 TMU 硬件指令:浮点除法、sqrt、sin、cos、atan 和 atan2。此外,如果 --tmu_support=tmu1 选项与 --fp_mode=relaxed 结合使用,则使用以下 32 位 RTS 数学函数的特殊版本:exp2f()、espf()、log2f()、logf() 和 powf()。

2.3.4.启用 IDIV 支持

在受支持的 C28x CPU 上,使用 --idiv_support=idiv0 来支持使用硬件扩展的快速整数除法,从而提供一个指令集来加速整数除法。启用此选项后,内置整数除法和模运算符(“/”和“%”)使用速度更快的相应指令。

如需详细了解如何启用 FPU、TMU 和 IDIV,请参阅 TMS320C28x 优化 C/C++ 编译器用户指南中的第 2.3.4 节“运行时模型选项”。

2.3.5.统一存储器模型

统一存储器模型意味着任何存储块都可用作程序内存或数据内存。包括 SARAM、闪存、ROM、OTP 和 XINTF 存储器在内的所有存储块在 C28x MCU 上实现了统一。外设寄存器通常只映射到数据空间。

如果应用程序内存映射配置为单个统一空间,则在构建选项 (--unified_memory) 中指定统一存储器模型很重要,因为这样会使编译器针对 memcpy 调用和结构赋值生成高效的指令。

即使使用统一存储器,用于一些外设的存储器以及一些与这些外设相关联的 RAM 都仅在数据存储器中分配。如果启用了 --unified_memory,则可以通过将这些符号声明为 volatile,阻止程序通过存储器地址访问特定的符号(例如外设寄存器)。

请参阅包含两个存储器操作数的指令的数据分配,了解通过使用 --unified_memory 使编译器生成 MAC 指令的示例。

2.3.6.启用调试

在初始开发过程中,建议使用以下选项进行调试:

  • -g (--symdebug:dwarf)
  • --opt_level=off

设置 --opt_level=off 可以改善调试体验。通常,应用的优化级别越高,调试程序就会越困难。这是因为,更高级别的优化可以实现更多的转换并适用于更广泛的编程粒度或范围。级别 0 和级别 1 的优化应用于函数内的单个语句或代码块,级别 2 支持跨函数内的代码块进行优化,级别 3 支持跨文件内的函数优化,级别 4 支持跨文件优化。在更高级别下执行转换通常更普遍,因此调试器更难将生成的代码映射到原始源程序。

有关详细信息,请参阅介绍调试和优化的 TI E2E 博客。