This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280039C:生成代码大小在 C28x 和 CLA 之间有很大不同

Guru**** 2933120 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1354268/tms320f280039c-the-build-code-size-has-large-different-between-c28x-and-cla

器件型号:TMS320F280039C

团队成员  

客户尝试将 PFC 控制逻辑从 C28x 移到 CLA、但他们发现、当将相同的 C 代码放入.c 文件和.cla 文件时、.cla 中的代码大小比.c 中的代码大得多、后者可在.map 文件中找到。

我还可以使用"cla_ex4_pwm_control"演示来测试此问题、只需添加一些简单的函数、然后单击"build"。

问题包括:

1.为什么会有差别?

2、如何优化 CLA 代码以使代码大小尽可能小。

谢谢、此致

4月25日。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Joe!

    关于 CLA 代码 占用更多存储器的原因、有几个潜在原因:

    • CLA 的指令集小于/大于 C28x 内核的指令集(实际上、它只是 FPU 指令集的一个子集、只是 C28x 指令集的扩展)。 它还比 C28x 内核包含更少的寄存器。 因此、在 CLA 内核上编译期间从程序代码生成的反汇编代码可能需要更多代码行来执行相同的功能、这会占用更大的存储器部分进行存储。 他们可能会浏览反汇编过程并查看是否有任何不必要的代码行生成、并尝试在删除这些代码行的情况下使用他们自己的.asm 文件。 但是、这可能存在风险、并且需要大量时间才能完成操作、确保删除的任何行都不会干扰代码的正确流程、因此我不建议这样做。
    • CLA 与 C28x 中的数据类型存储方式存在差异。 下面列出了差异。 例如、如果他们int在他们的代码中使用很多类型变量、这些变量将占用 CLA 上两倍的内存量(32位而不是16位)。 为了避免此问题,它们可以使用指定大小信息的类型声明,例如:uint16_tint16_t等,以确保在只需要/使用16位值时内存中不占用32位。 这还将避免在将代码移植到 CLA 时出现任何类型差异/问题。
    • .cla 代码在编译时会经过不同的优化器、而 C28x 优化器优化其代码的能力与 CLA 优化器的能力可能存在一些差异。 有关这方面的更多信息、请参阅 TMS320C28x 优化 C/C++编译器 v17.6.0.STS 用户指南(修订版 N)。

    一般来说、CLA 的作用是卸载实时任务以减少 C28x 开销。 不一定要进行 C28x 内核能够完成的计算和逻辑数量/级别相同、这就是他们在尝试此操作时会遇到存储器折衷的原因。

    此致、

    德拉尼