ZHCU876Z July 2001 – October 2023 SM320F28335-EP
这些选项专用于 TMS320C28x 工具集。有关更多信息,请参阅参考的章节。节 2.3.11中列出了 TMS320C28x 专用汇编器选项。
C28x 编译器同时支持 COFF ABI 和嵌入式应用程序二进制接口 (EABI) ABI。EABI 使用 ELF 目标文件格式和 DWARF 调试格式。
--abi={eabi|coffabi} | 指定应用程序二进制接口 (ABI)。默认的 ABI 为 COFF。还支持 EABI。请参阅节 2.13。请参阅《C28x 嵌入式应用程序二进制接口应用报告》(SPRAC71)。 EABI 应用程序中的所有代码都必须为EABI 构建。在将现有的 COFF ABI 系统迁移到 EABI 之前,请确保所有库都在 EABI 模式下可用。 |
|
--cla_support={cla0|cla1|cla2} | 指定 TMS320C28x 控制律加速器 (CLA) 支持 类型 0、类型 1 或类型 2 。此选项用于编译或汇编为CLA 编写的代码。此选项在链接时不需要任何特殊的库支持;支持/不支持FPU的C28x所使用的库应该足够了。 | |
--float_support={ fpu32 | fpu64 | softlib } | 指定使用 TMS320C28x 32 位或 64 位硬件浮点支持。使用 --float_support=fpu32 指定具有 32 位硬件浮点支持的 C28x 架构。使用 --float_support=fpu64 指定具有 64 位硬件浮点支持的 C28x 架构。仅当使用 EABI 时才支持 FPU64。 |
|
如果使用 --tmu_support 选项来支持三角函数加速器,则 --float_support 选项会自动设置为 fpu32。默认值为 softlib,它会在没有特殊硬件支持的情况下执行浮点计算。 | ||
--idiv_support={ none | idiv0 } | 使用硬件扩展来支持快速整数除法,以提供一组加速整数除法的指令。如果此硬件可用,请使用 --idiv_support=idiv0 来使用这些指令。默认为 none。包含此硬件的器件的数据表中含有“支持快速整数除法 (FINTDIV)”字样。(仅限 EABI。) 启用此选项后,内置整数除法和模运算符(“/”和“%”)使用适当的速度更快的指令。有关此类情况的更多信息,请参阅节 7.8.2。 启用此选项后,还可以使用节 7.6.4中介绍的快速整数除法内在函数。为了使用这些内在函数,代码必须包含 |
|
--no_rpt | 阻止编译器生成重复 (RPT) 指令。默认情况下,会为某些 memcpy、除法和乘法累加运算生成重复指令。但是,重复指令是不可中断的。 | |
--pending_instantiations=# | 指定在任何给定时间内可能正在进行的模板实例化的数量。使用 0 指定一个不受限制的数字。 | |
--protect_volatile=num | 启用易失性引用保护。已声明为易失性的非局部变量之间可能会发生流水线冲突。当写入一个易失性变量,然后读取另一个 易失性变量时,可能会发生冲突。--protect_volatile 选项允许在两个易失性引用之间至少放置 num 条指令,以确保写入操作发生在读取操作之前。num 为可选。如果未指定 num,则默认值为 2。例如,如果使用了 --protect_volatile=4,则易失性写入和易失性读取至少受到 4 条指令的保护。 外设流水线保护硬件保护所有内部外设和 XINTF 区域 1。如果将外设连接到 Xintf 区域 0、2、6、7,则可能需要使用 --protect_volatile 选项。内存不需要硬件保护或使用此选项。 |
|
--ramfunc={on|off} | 如果设置为 on,则指定所有函数都应放置在位于 RAM 中的 .TI.ramfunc 段中。如果设置为 off,则只有具有 ramfunc 函数属性的函数才会以此种方式被处理。请参阅节 6.15.2。 | |
较新的 TI 链接器命令文件通过在 .TI.ramfunc 段中放置函数来自动支持 --ramfunc 选项。如果链接器命令文件不包含 .TI.ramfunc 段的段规格,则可以修改链接器命令文件以将此段放在 RAM 中。有关段放置位置的详细信息,请参阅《TMS320C28x 汇编语言工具用户指南》。 | ||
--rpt_threshold=k | 生成迭代 k 次或次数更少的 RPT 循环(k 是0 和 256 之间的常数)。如果迭代次数大于 k 并且代码大小没有增加太多,则可以为同一个循环生成多个 RPT。在优化代码大小时使用此选项禁止为迭代次数可能大于k的循环生成RPT 循环。 | |
请注意,通过带有寄存器操作数的 RPT,内联的 memcpy 调用现在支持超过 255 个字。因此,可支持内联最多 65535 个字的 memcpy。如果设置 --no_rpt 或 --rpt_threshold 选项,则分别禁用或减少此类内联。可使用 --rpt_threshold 指定的最大值仍然是 256。 | ||
--silicon_errata_fpu1_ workaround=on|off |
启用此选项可防止在某些指令期间可能发生的 FPU 寄存器写入冲突。在 FRACF32、F32TOUI32 或 UI16TOF32 指令期间不能发生 CPU 到 FPU 寄存器写入。如果启用此选项,编译器会在这些指令之前增加五条 NOP 指令以防止冲突。 如果启用了以下任一选项,则默认情况下会禁用此选项:--float_support=fpu64、--tmu_support 或 --vcu_support=vcu2|vcrc。 |
|
--silicon_version=28 | 为 TMS320C28x 架构生成代码。唯一接受的值是 28。这是默认值,因此命令行上不再需要此选项。 | |
--unified_memory | 如果内存映射配置为单个统一空间,则使用 --unified_memory (-mt) 选项;此选项允许编译器为大多数 memcpy 调用和结构赋值生成 RPT PREAD 指令。这也使得 MAC 指令得以生成。--unified_memory 选项还允许使用更高效的数据内存指令来访问切换表。即使使用统一的内存,一些外设的内存以及与这些外设关联的 RAM 也只在数据内存中分配。 | |
如果启用了 –unified_memory,可以通过将符号声明为易失性来阻止程序内存地址访问特定的符号。易失性和非易失性符号之间的结构体赋值会对所使用的指令产生不同的影响,具体取决于赋值的方向。从非易失性到易失性的结构体赋值可以将 RPT 与 PREAD 搭配使用,其中 PREAD 使用程序总线读取非易失性源操作数。从易失性分配到非易失性的结构体赋值可以将 RPT 与 PWRITE 搭配使用,其中 PWRITE 使用程序总线写入非易失性目标操作数。 | ||
--tmu_support[=tmu0|tmu1] | 支持三角数学单元 (TMU) 。使用此选项会自动启用 FPU32 支持(与 --float_support=fpu32 选项一样)。当启用 TMU 支持时,可使用内在函数在 TMU 上执行三角函数指令。 | |
TMU 硬件指令和库例程之间存在算法差异,因此运算结果可能略有不同。 | ||
tmu1 设置仅适用于 EABI。除了 tmu0 设置支持的内在函数之外,tmu1 设置还增加了对 LOG2F32 和 IEXP2F32 内在函数的支持。 | ||
在宽松浮点模式下,RTS 库调用被替换为相应的TMU 硬件指令,用于以下浮点运算:浮点除法、sqrt、sin、cos、atan 和 atan2。此外,如果 --tmu_support=tmu1 选项与 --fp_mode=relaxed 结合使用,则使用下述 32 位浮点数学函数的特殊版本:exp2f()、expf()、log2f()、logf() 和 powf()。未提供适用于 EABI 64 位 double 类型的宽松版本。 | ||
--vcu_support[=vcu0|vcu2|vcrc] | vcu0 和 vcu2 设置指定支持 Viterbi、复数数学和 CRC 单元 (VCU) 的类型 0 或类型 2。请注意,没有 VCU 类型 1。默认值为 vcu0。 | |
vcrc 设置指定仅支持循环冗余校验 (CRC) 算法。仅当使用 FPU32 或 FPU64 时,才支持 vcrc 。 | ||
仅当源代码是为 VCU 编写的汇编代码时,此选项才有用。对于 C/C++ 代码,此选项被忽略。此选项在链接时不需要任何特殊的库支持;支持/不支持VCU的C28x所使用的库应该足够了。同样,请注意,没有 VCU 类型 1。 |