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 任务内在4096.0之间偏离的最快方法

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1119175/tms320f28075-fastest-way-to-devide-between-4096-0-within-a-cla-task

器件型号:TMS320F28075

你好。

我想许多应用需要在4096.0之间进行分频、因此我想知道如何使用 FPU 通过 CLA 执行2^n 分频的最快方法。

提前感谢您。

此致、  

帕洛马

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

    您好、Paloma、

    我正在咨询专家。 很快就会回来。

    此致、

    Veena

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

    您好、Paloma、

    是整数型还是浮点型?

    如果是整数,使用 shift 运算符的速度会更快(num >> 12)

    对于浮点、一个选项是取出指数字段、减去12并将其放回

    此致、

    Veena

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

    您好 Veena。 感谢您的回答。

    它是浮点类型。 您能给我写一个示例吗:

    [引用 userid="128297" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1119175/tms320f28075-festreal-way 减去-40960-within -a-cla-task/4150009#4150009"]以取回引号/指数字段并将其移回12并将其除]

    此致、  

    帕洛马

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

    您好!

    如果是浮点、一个更好的选择是乘以1/4096。 如果在构建时知道的数字4096、编译器将自动计算反向、而 CLA 将只执行乘法指令。

    CLAMath 库还提供了一个 CLAdiv 函数 、该函数使用 Newton-Raphson 方法实现除法

    此致、

    Veena

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

    你好

    我使用  PWM 计时器评估代码执行所需的时间、如下所示:

    EPwm12Regs.TBCTL.bit.CTRMODE = TB_FREEZE;

    EPwm12Regs.TBCTR = 0;

    EPwm12Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;

    /******** 要评估的代码******** /

    CLK_CYCLS = EPwm12Regs.TBCTR;  

    其中 clk_cycles 保存 执行  /******的周期数 要评估的代码******** /

    我已经评估了以下代码:

    1.   反馈=(float)(AdcdResultRegs.ADCRESULT0)/4096.0;-> clk_cycl= 1
    2.   Feedback =(float)(AdcdResultRegs.ADCRESULT0)*0.000244140625;-> clk_cycles = 3            

    ¿乘法 运算需要更多的周期来执行是正常的吗? ¿您知道更好的评估执行时间的方法吗?

    谢谢你。

    此致、

    帕洛马

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

    您好、Paloma、

    我建议查看 生成的汇编代码。

    您是否启用了优化?

    此致、

    Veena

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

    您好!

    我们使用以下优化:-O2、--opt_for_speed=5、--fp_mode=relaxed。

    我们看到了生成“/4096”和“*0.000244140625”操作的汇编代码,实际上它是相同的,1clk 周期。 一个操作 正在一个接一个地执行、我想 CLA 优化了第一个操作。 因此、第一个位置的任何一个都比第二个执行速度更快。

    在这种情况下, ASM 指令数的不同之处在于使用局部变量而不是全局变量。

    感谢你的帮助。

    此致、

    帕洛马