暴躁韭菜 发表于 2024-4-14 10:37:53

关于AC6编译器FPU运算问题

使用AC6编译器,计算一个稍微复杂的数据,调试发现计算错误且观察反汇编没有使用相关硬件FPU指令计算,使用AC5倒是默认计算正常,也使用了专用指令。具体如下

min = data[(uint16_t)((target * 1000 - OFFSET)/2.6f * 0.6f)];
AC6下该如何写类似代码呢,是加f或不加的问题吗。

2859932063 发表于 2024-4-14 19:26:04

keil默认是双精度,没记错F4只支持单精度。所以要加F

eric2013 发表于 2024-4-15 09:52:39

1、这个可以考虑分步在AC6计算下,看看是那步计算有问题。这种的一般都是变量类型转换有问题了
2、AC5和AC6下的f后缀添加基本一样的,加f是单精度计算,不加默认就是双精度计算。

1010186930 发表于 2024-4-15 13:54:47

keil mdk里面有enable fpu

庄永 发表于 2024-4-15 22:26:39

AC5和AC6,包括使不使用微库。对你这种隐式转换和整形转浮点数的处理都可能不兼容,可以参考https://www.armbbs.cn/forum.php?mod=viewthread&tid=122467&extra=

暴躁韭菜 发表于 2024-4-18 21:12:12

庄永 发表于 2024-4-15 22:26
AC5和AC6,包括使不使用微库。对你这种隐式转换和整形转浮点数的处理都可能不兼容,可以参考https://www.ar ...

好的,代码需要改动,不能太花。

暴躁韭菜 发表于 2024-4-21 08:25:50

问题解决了,代码可以那么写,对应的变量min定义时加_IO,避免编译器优化,这样就正常了,反汇编观察也是符合预期的。

eric2013 发表于 2024-4-22 07:28:58

暴躁韭菜 发表于 2024-4-21 08:25
问题解决了,代码可以那么写,对应的变量min定义时加_IO,避免编译器优化,这样就正常了,反汇编观察也是符 ...

谢谢告知最终问题原因。
页: [1]
查看完整版本: 关于AC6编译器FPU运算问题