[STM32F4] STM32F4浮点运算单元FPU使用的问题。

[复制链接]
2055|10
 楼主| cry1109 发表于 2020-11-11 10:49 | 显示全部楼层 |阅读模式
本帖最后由 cry1109 于 2020-11-11 10:51 编辑

按照网上的步骤开启STM32F407的FPU,但是在计算时如何使用FPU进行浮点数运算?我测试了一下,发现开启与不开启运算时间没什么区别。下面是测试代码,以及开启FPU的步骤。

第一步开启硬件FPU:
657555fab4a15bf24b.png
第二步定义相关宏:
165895fab4a6058617.png

第三步,编译后发现SystemInit()里确实已经开启了FPU:
668235fab4ab7e9ca6.png
第四部包含arm_math.h:
274935fab4b1443289.png
最后贴上浮点运算测试代码:
878805fab4b504ff68.png

运行1000次需要30us的时间,在做这些设置之前测试运算时间大概也是30us。哪儿设置错了,还是说FPU只是针对某些数**算比说开方和三角函数进行优化?



sonicll 发表于 2020-11-11 13:30 | 显示全部楼层
你先把优化改成O0再对比试试,O3优化,可能有些计算过程被跳过了
香水城 发表于 2020-11-11 15:14 | 显示全部楼层
也不排除你这个是执行时间太短,你的测算方式看不出差别来。

你不妨将循环次数加大点,再添加下其它诸如开方、三角函数的计算看看。
 楼主| cry1109 发表于 2020-11-12 09:27 | 显示全部楼层
sonicll 发表于 2020-11-11 13:30
你先把优化改成O0再对比试试,O3优化,可能有些计算过程被跳过了

改成优化O0后,结果计算时间更长了。
 楼主| cry1109 发表于 2020-11-12 09:33 | 显示全部楼层
香水城 发表于 2020-11-11 15:14
也不排除你这个是执行时间太短,你的测算方式看不出差别来。

你不妨将循环次数加大点,再添加下其它诸如开 ...

计算普通的加减乘除10000次还是看不来差别,时间大概都在297us左右,两种方式的时间相差在1us之内。后面试了exp和cos函数,结果开启FPU后计算时间更慢一些,可以明显看出来差别。
zchong 发表于 2020-11-12 12:14 | 显示全部楼层
本帖最后由 zchong 于 2020-11-12 12:16 编辑

看看汇编,确定fpu用起来了,另外注意一下优化,是不是就没执行
香水城 发表于 2020-11-12 21:36 | 显示全部楼层
我这边用STM32F4的开发板测试了下,差别还是挺大的。

提醒下,用硬件浮点单元和不用时所调用的库文件是不一样的。

以F4为例,一个是 xxxM4L.lib, 一个是xxxM4LF.lib.
 楼主| cry1109 发表于 2020-11-14 09:33 | 显示全部楼层
香水城 发表于 2020-11-12 21:36
我这边用STM32F4的开发板测试了下,差别还是挺大的。

提醒下,用硬件浮点单元和不用时所调用的库文件是不 ...

城主您好,xxxM4L.lib和xxxM4LF.lib是不是arm_cortexM4l_math.lib和arm_cortexM4lf_math.lib?
香水城 发表于 2020-12-9 21:39 | 显示全部楼层
liangshuang95 发表于 2020-12-10 08:59 来自手机 | 显示全部楼层
本身计算量很少的话,差距可能不明显吧!
happy0god 发表于 2020-12-10 12:28 | 显示全部楼层
**不错啊,学了不少东西
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

172

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部