硬汉嵌入式论坛

 找回密码
 立即注册
查看: 312|回复: 7
收起左侧

关于AC6编译器FPU运算问题

[复制链接]

7

主题

11

回帖

32

积分

新手上路

积分
32
发表于 2024-4-14 10:37:53 | 显示全部楼层 |阅读模式
使用AC6编译器,计算一个稍微复杂的数据,调试发现计算错误且观察反汇编没有使用相关硬件FPU指令计算,使用AC5倒是默认计算正常,也使用了专用指令。具体如下

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

使用道具 举报

3

主题

96

回帖

105

积分

初级会员

积分
105
发表于 2024-4-14 19:26:04 | 显示全部楼层
keil默认是双精度,没记错F4只支持单精度。所以要加F
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2024-4-15 09:52:39 | 显示全部楼层
1、这个可以考虑分步在AC6计算下,看看是那步计算有问题。这种的一般都是变量类型转换有问题了
2、AC5和AC6下的f后缀添加基本一样的,加f是单精度计算,不加默认就是双精度计算。
回复

使用道具 举报

4

主题

21

回帖

33

积分

新手上路

积分
33
发表于 2024-4-15 13:54:47 | 显示全部楼层
keil mdk里面有enable fpu
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2024-4-15 22:26:39 | 显示全部楼层
AC5和AC6,包括使不使用微库。对你这种隐式转换和整形转浮点数的处理都可能不兼容,可以参考https://www.armbbs.cn/forum.php? ... d=122467&extra=
回复

使用道具 举报

7

主题

11

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2024-4-18 21:12:12 | 显示全部楼层
庄永 发表于 2024-4-15 22:26
AC5和AC6,包括使不使用微库。对你这种隐式转换和整形转浮点数的处理都可能不兼容,可以参考https://www.ar ...

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

使用道具 举报

7

主题

11

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2024-4-21 08:25:50 | 显示全部楼层
问题解决了,代码可以那么写,对应的变量min定义时加_IO,避免编译器优化,这样就正常了,反汇编观察也是符合预期的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2024-4-22 07:28:58 | 显示全部楼层
暴躁韭菜 发表于 2024-4-21 08:25
问题解决了,代码可以那么写,对应的变量min定义时加_IO,避免编译器优化,这样就正常了,反汇编观察也是符 ...

谢谢告知最终问题原因。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-2 01:42 , Processed in 0.174127 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表