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.

[参考译文] TMS320F28069:编译器优化指南中的可能错误

Guru**** 2538950 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1238144/tms320f28069-possible-mistake-in-compiler-optimization-guide

器件型号:TMS320F28069

您好  

此处的 C2000编译器优化指南中  、  

FPU32 float  _fmax (float   x、float   y); MAXF32dst src 如果  src>dst、则将 src 复制到 dst。

无法找到 x 和 y 与 src 和 dst 的关系。  

不仅如此、还有几条其他线路也存在这个问题。 有人可以澄清一下吗?  

谢谢你。

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

    您必须使用编译器手册的旧版本。  最新版本 显示...

    float _fmax( float x , float y );   MAXF32 y , x   如果 x>y ,将 x 复制到 y。

    谢谢。此致、

    -乔治

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

    谢谢

    与开仓操作人员相比、这种情况下可以实现多大的性能提升。  

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

    使用此 _fmax 内在函数而非等效项 如果 / 否则 语句可能为每个实例节省大约5-10个周期。  如果在多次调用的函数或迭代多次的循环中发生、则总计足够的周期就足够了。

    谢谢。此致、

    -乔治

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

    谢谢。

    如果我使该函数正确、则可以在最小 饱和电平检查函数中使用它。  
    例如、  

    #define min 10
    if(var<min)var=min;

    等于_ fmax (min、var)

    是这样吗?

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

    Damith 您好!

    我将对此做一些研究、并努力在星期四之前与您联系。

    此致、

    阿米尔·奥马尔

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

    Damith 您好!

    我研究了 fmax 的实现、本质上它只是比较/返回传入它的两个值中的较大者。 不过、还有一些与浮点格式相关的附加检查(即+0与-0以及 NaN 值)。

    此致、

    阿米尔·奥马尔

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

    感谢 Omar

    提示它有点奇怪、这个名为 fmax、但它实际上 用于查找最小值。  

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

    Damith 您好!

    这是一个问题还是观察结果? 我不知道 Sint 是指什么。

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

    对不起。 这是.A 拼写错误。

    它应该是"不是"而不是 Sint。

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

    Damith 您好!

    抱歉,我不明白你的问题;功能是一样的,它仍然返回最大值,无论它找到的是最小值还是最大值. 选择一个而不选择另一个是没有好处的、因为总是会有条件语句检查边沿情况。

    此致、

    阿米尔·奥马尔

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

    很抱歉有人对此感到困惑。 它不会归还任何东西。 它只将最小值(我们提供的常数)存储 在检查变量中。

    换句话说、如果这个值被命名为 max、 我们不能使用它来钳制到 max。 我们只能使用它钳位到最小值。

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

    Damith 您好!

    您能否举个例子、说明您测试的是什么数字? 如果使用"Assembly Step"按钮、您是否能够进入正确的功能(您可以在"Disassembly"视图中查看)?

    此致、

    阿米尔·奥马尔

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

    你好,Amir

    我很抱歉,但我不明白你说"返回"是什么意思。 此内在函数不会返回像函数那样的值。 如果条件为真、它只是将一个复制到另一个。   
    float _fmax( float x , float y );   MAXF32 y , x   如果 x>y ,将 x 复制到 y。


    这等于

     #define 最小值10
    if (var<min) var=min;

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

    很抱歉、您能给大家展示一下正在尝试的测试值、结果是什么? 由于这是一个内在函数、您应该仍然能够在"Disassembly"视图中对其进行单步执行。