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.

[参考译文] TMS320F280049:复数的内置函数

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1332047/tms320f280049-built-in-functions-for-complex-numbers

器件型号:TMS320F280049

您好!

对于我项目中的一些计算、我需要使用复数。 我使用的 CCS 版本为11.0.0.00012、其中包含编译器 TI v21.6.0.LTS1。 微控制器 F280049具有96 MHz 的 CPU 时钟。

使用标头 内置的函数可以计算,例如参数、绝对值或复数的平方根。 但这些函数似乎效率很低。

例如:

当我使用 cargf (x)计算 x 的参数时、我需要围绕13 µs。 但当我改用 atan2f (cimagf (x)、crealf (x))时、它需要的时间不到1 µs。

I get similar results when using cabsf etc.

So now I am wondering, why there is such a difference in the time.
Is it wrong to use these functions?
Do I maybe need to set something in the project properties, such that the compiler translates the function calls to the correct instructions?


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

    Michael、您好!

    Unknown 说:
    当我使用 cargf (x)计算 x 的参数时、我需要围绕13 µs。 但当我使用 atan2f(cimagf(x)、crealf(x))时,它需要小于1 µs。[/引号]

    我对这些编译器内在  函数不是很熟悉、但根据我研究的结果、这可能是因为正在使用的 atan2f 函数、因为 cimagf 和 crealf 本身并不是非常复杂的函数。 您可以查看在调试代码时执行的反汇编以进行验证(根据需要将汇编步骤插入函数)。

    Unknown 说:
    使用这些函数是不对的吗?

    这需要您更多地决定、它是否正常工作、但比您决定效率是否重要要花费更长的时间。

    我是否需要在项目属性中设置一些内容,以便编译器将函数调用转换为正确的指令?

    他们是否不传达正确的指令? 或者您是否尝试使用某个库来代替调用编译器内在函数?

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

    您好、Omer:

    感谢您的答复。

    我在调试时查看了代码以及反汇编代码。 但奇怪的是、cargf 函数完全执行了我用来替换它的操作(请参阅屏幕截图)。

    但是、不应仅仅因为10 µs 在其自身的函数中是不同的、就利用它(以及更多)来执行相同的代码。 对吧?

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

    Michael、您好!

    但它不应该使用10 µs (以及更多)来执行相同的代码,因为它在其自己的函数中是分开的。 对吗?

    这取决于编译器生成汇编代码的方式、您需要对作为 cargf 一部分执行的所有代码(包括函数调用和函数本身)和 atan2f 代码(函数调用加上函数本身)进行比较。 虽然我不知道这是否会产生10us 的差异、但在函数内调用函数本身就需要比直接调用函数更多的执行时间、尤其是因为这里的函数看起来不是内联函数。

    但是、如果您直接彻底比较汇编代码、它应该解释执行时间的差异、因为指令的数量/类型是导致 差异的原因。