ZHCU875Z August 2001 – October 2023 SM320F28335-EP
一个支持控制律加速器 (CLA) 协处理器的指令集可用于 C28x。启用这些指令的方法是使用 --cla_support=[cla0|cla1|cla2] 选项来调用编译器。使用 cla0 表示 CLA 类型 0 器件,cla1 表示类型 1 器件,依此类推。--cla_support 选项可随其他 C28x 选项(例如用于指定 FPU 支持的选项)一同指定。指定 FPU 和 CLA 两个选项意味着支持这两种类型的加速器。CLA 支持类似于基本的 C28x 支持(无论有没有 FPU 支持)。差异如下:
CLA 编译器将所有 CLA 函数数据、参数和临时存储数据放在 .scratchpad 段的函数框架中。函数框架暂存段以“.scratchpad:functionSectionName”的形式命名。(每个函数都有自己的子段,因此具有唯一的段名。)例如:.scratchpad:Cla1Prog:_Cla1Task2 将是编译器为名为 Cla1Task2() 的函数生成的暂存区段名称。
CLA 编译器针对函数暂存区符号的命名采用 __cla_functionSymbol_sp 形式,但这在汇编代码中不是必需的。
CLA2 后台任务会放置在带有“.scratchpad:background:functionSectionName”形式函数框架段的暂存区中。后台任务框架不能与任何其他函数框架叠加,因为后台任务很可能在遇到中断后返回。
以下示例显示了编译后的代码,其中包含用于 CLA 函数的 .sect 指令以及用于标识函数暂存区框架的 .usect 指令。此 .usect 指令将函数框架标识为 .scratchpad 段的一部分,并允许编译器在可能的情况下使用叠加层。叠加的函数框架使用相同的物理存储器,从而会降低存储器利用率。建议汇编代码遵循“.scratchpad:”命名规则以降低存储器要求。
.sect "Cla1Prog:_Cla1Task2"
.align 2
__cla_Cla1Task2_sp .usect ".scratchpad:Cla1Prog:_Cla1Task2",14,0,1
.global _Cla1Task2
;***************************************************************
;* FNAME: _Cla1Task2 FR SIZE: 14 *
;* *
;* FUNCTION ENVIRONMENT *
;* *
;* FUNCTION PROPERTIES *
;* 14 Auto, 12 SOE *
;***************************************************************
_Cla1Task2:
[ ...]
如果以上示例中的 CLA 函数是 CLA2 后台任务,则 .usect 指令会将暂存区框架标识为“.scratchpad:background:Cla1Prog:_Cla1Task2”。
更多详细信息,请参阅《TMS320C28x 优化 C/C++ 编译器用户指南》中的“CLA 编译器”一章。