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.
工具与软件:
尊敬的 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
假设您指的是可以在浮点常量之后写入的后缀、如所示 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 参数类型的函数的参数、 例如:
double add(double A, double B){return A+B;} flaot x = 1.0; x = add(x,x);
调用函数和返回时会有类型转换(通过调用 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位浮点表示之间转换的说明[/报价][/quote]是的。 但只有几个周期。[/报价]我收到了客户的示例代码、即类型转换是通过调用函数完成的、经过许多周期后、性能差别很大。 您能解释一下这里的区别吗?
代码为:
Fullscreen12345678#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_USXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#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他们正在将带有或不带有(F32)转换语句的宏进行比较。
当进行 F32转换时、它们得到汇编:
如果没有 F32转换语句、则得到以下汇编代码:
它不仅具有更长的时间、而且包含需要更多周期的 LCR。
请准备一个使用这两个宏变体的测试用例 DCBus_sampling_step_us 呈现方式类似的方式在实际应用中进行显示。 一种变体使用强制转换为 F32 而另一个则不是。 此测试用例只需要是一个编译为一个目标文件的单个 C 文件。 它不需要运行。 使用编译器选项进行构建 -- src_interlist . 这会使编译器保留自动生成的汇编文件。 此文件与源文件具有相同的名称、扩展名更改为 .asm . 检查此汇编文件、以确保它生成您在上一篇文章的屏幕截图中显示的代码。 对于此测试用例、请 提交文章如何提交编译器测试用例中描述的所有详细信息。
谢谢。此致、
-George.