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.

[参考译文] TMS320F28P650DH:有关 EABI VS COFF 的问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1464091/tms320f28p650dh-questions-on-eabi-vs-coff

器件型号:TMS320F28P650DH

工具与软件:

尊敬的 BU 专家:

这里我有 几个关于客户的 EABI 和 COFF 差异的详细问题、您能帮助说明一下吗?

在 C 语言代码中、后缀"f"代表 float、而"l"代表 long double 吗?  

2.将 FPU64与 EABI double (64位)结合使用时、与将 FPU32与 COFF double (32位)结合使用时、这种速度更快? 是否有比较文件?

3.是否有 FPU32与 FPU64相关的文档?

4、关于--fp_mode 选项。 与严格模式相比、使用宽松模式时、 精度和性能影响是否有基准?

此致、

挂起

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

    您好!

    我将该线程提请编译器专家注意、以获取进一步帮助。

    谢谢

    Ki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="571219" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1464091/tms320f28p650dh-questions-on-eabi-vs-coff "]在 C 代码中、后缀"f"代表浮点型、"l"代表长双精度型吗?  [报价]

    假设您指的是可以在浮点常量之后写入的后缀、如所示 123.456. .  答案是肯定的。  COFF 和 EABI 都是如此。

    当使用 FPU64与 EABI double (64位)搭配使用时、使用 FPU32与使用 COFF double (32位)搭配使用时、哪种方法更快?

    差异很小。   本答案 假定您在 C28x CPU 上执行、该 CPU 具有可执行 C 代码中指定的浮点运算的指令。  例如、您编写代码  a+b. 和两个变量都是 type  long double   则 假定 C28x CPU 具有可执行64位浮点加法的指令。

    是否有比较文件?

    [quote userid="571219" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1464091/tms320f28p650dh-questions-on-eabi-vs-coff 有关--fp_mode 选项。 使用宽松模式与严格模式时、 精度和性能影响是否有基准?[/QUOT]

    不幸的是、没有基准。  但是、有一篇文章进行了讨论 - fp_mode 、可能会有所帮助。  请搜索文章 浮点优化 - fp_mode .

    谢谢。此致、

    -George.

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

    您好、George:

    感谢您的及时响应!  

    He Chen 说:
    此答案 假定您在 C28x CPU 上执行的指令可以执行 C 代码中指定的浮点运算。

    您是指具有 FPU64的 C28x CPU? (__LW_AT__他们正在使用 F28P65、所以我认为 CPU 会有用于基本数学运算的指令、他们可以参考指令集以了解具体指令)正确吗?

    如果使用 float 作为具有 double 参数类型的函数的参数、 例如:

    Fullscreen
    1
    2
    3
    double add(double A, double B){return A+B;}
    flaot x = 1.0;
    x = add(x,x);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    调用函数和返回时会有类型转换(通过调用 FS $TOFD 和 FD$TOFS ),这需要额外的时间,对吗? 如果上述代码中的 x 是 double、它会更快吗?

    此外、是否有关于#3的文档?

    3. FPU32与 FPU64是否有任何文档?[/QUOT]

    谢谢!

    挂起。

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

    可以、适用于 C 代码指定64位浮点运算的情况。  一个例子是类型的操作 双精度 通常使用 EABI。

    [报价 userid="571219" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1464091/tms320f28p650dh-questions-on-eabi-vs-coff/5621250 #5621250"]他们使用的是 F28P65、因此我认为 CPU 将具有用于基本数学的指令(__LW_AT__他们可以参考指令集以了解特定指令)正确?

    像我这样的编译器专家不会跟踪特定器件上可用的硬件功能。  我快速浏览了数据表、结果显示您是正确的。

    将有类型转换

    有。

    (通过调用 FS TOFD$$TOFD 和 FD$$TOFS)

    否  有用于在64位和32位浮点表示之间转换的指令。

    如果上述代码中 x 是双精度值、速度会更快吗?

    有。  但只能更改几个周期。

    很抱歉,我忽略了这个问题...

    [quote userid="571219" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1464091/tms320f28p650dh-questions-on-eabi-vs-coff FPU32与 FPU64有任何文档吗?

    编译器团队从未发布任何内容。  我自己从未见过任何东西。   

    谢谢。此致、

    -George.

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

    您好、George:

    "你说什么

    否  提供了在64位和32位浮点表示之间转换的说明[/报价]
    是的。  但只有几个周期。[/报价]

    我收到了客户的示例代码、即类型转换是通过调用函数完成的、经过许多周期后、性能差别很大。 您能解释一下这里的区别吗?  

    代码为:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    #define MAINS_SAMPLING_FREQ_HZ 19200.0L
    #define DCBUS_MAINS_SAMPLING_STEP_US (F32)(1000000.0L/MAINS_SAMPLING_FREQ_HZ);
    // vs
    //#define DCBUS_MAINS_SAMPLING_STEP_US (1000000.0L/MAINS_SAMPLING_FREQ_HZ); // without (F32)
    float x;
    x += DCBUS_MAINS_SAMPLING_STEP_US
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    他们正在将带有或不带有(F32)转换语句的宏进行比较。

    当进行 F32转换时、它们得到汇编:

    如果没有 F32转换语句、则得到以下汇编代码:

    它不仅具有更长的时间、而且包含需要更多周期的 LCR。

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

    请准备一个使用这两个宏变体的测试用例  DCBus_sampling_step_us 呈现方式类似的方式在实际应用中进行显示。  一种变体使用强制转换为 F32 而另一个则不是。  此测试用例只需要是一个编译为一个目标文件的单个 C 文件。  它不需要运行。  使用编译器选项进行构建 -- src_interlist .  这会使编译器保留自动生成的汇编文件。  此文件与源文件具有相同的名称、扩展名更改为 .asm .  检查此汇编文件、以确保它生成您在上一篇文章的屏幕截图中显示的代码。  对于此测试用例、请 提交文章如何提交编译器测试用例中描述的所有详细信息

    谢谢。此致、

    -George.