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.

[参考译文] TMS320F28075:在 CLA 上编写更高效的 c 代码

Guru**** 2391415 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1245236/tms320f28075-writing-more-efficient-c-code-on-cla

器件型号:TMS320F28075

尊敬的 Champ:

我要求为我的客户提供服务。

我的客户熟悉 C 代码、到目前为止、他们已 在 CLA 上对控制环路实现了超过90%的利用率、而控制环路中还有更多的内容。

他们试图在改进有限的情况下提高编译器的优化级别。

因此、他们 希望从基础方面组织他们在 CLA 上运行的 C 代码、以更 高效、正确的方式进行编码。  

我们是否有指导原则让用户遵循 CLA 上运行的 C 代码编码风格? 这对于用户避免在 CLA 上使用一些不推荐的编码方式非常有帮助。

谢谢。此致、

约翰尼  

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

    您好、Johnny、

    我们有软件开发人员指南、但是客户似乎已经对 CLA 很熟悉。

    我会把一些想法汇集起来,并会在明日(星期五)发表。

    此致、

    洛里

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

    在针对 CLA 进行开发时、请记住以下事项:

    • CLA 比 C28x FPU 更小-浮点结果寄存器更少、辅助寄存器更少。  
    • CLA 具有比 C28x FPU 更小的指令集。
      • CLA 的指令集专注于浮点数学。
      • CLA 具有整数加法/减 法、但没有 C28x FPU 那样多的变化。 它没有整数乘法。
      • 支持像模数(x = y%1000)这样的一些操作、但是没有像 C28x 那样的特殊指令来帮助进行这种计算。
    • CLA 没有 RPT 块。 这意味着对于循环、C28x FPU 可以克服每个循环的分支开销。
    • CLA 没有可影响 sin/cos/atan 类型指令的 TMU。

    理念:

    • 请寻找 CLA 通过与 C28x 并行执行浮点计算来帮助 C28x 的机会。
    • CLA 没有与 C28x 相同的读取-修改-写入操作。
      • 这会导致额外的周期访问.bit 字段(使用我们的位字段结构)。
      • 一种解决方案是使用.all 写入/读取整个寄存器、而不是如 E2E 文章中所述。 大多数在运行期间更新的 ePWM 寄存器都可作为.all 而不是通过.bit 进行访问。
    • 很多决策(if/else/else 类型代码)都会降低 C28x 和 CLA 的性能。 寻找更改逻辑的方法来减少决策或使用多个任务、而不是在一个任务中拥有大量决策。  
    • CLA 没有支持无符号整数比较的指令。 尝试 执行与浮点数的比较。  
    • 减少指针的使用。 示例:
      • 当前代码:CLA 使用一个结构、此结构在一个任务期间被多次访问。
      • 尝试以下操作:从结构中读取一次、使用局部变量、然后在末尾写回结构。 (注:我认为这也提升了 C28x 的性能)

    此致、

    洛里