打印
[STM32F4]

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

[复制链接]
1587|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cry1109|  楼主 | 2020-11-11 10:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cry1109 于 2020-11-11 10:51 编辑

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

第一步开启硬件FPU:

第二步定义相关宏:


第三步,编译后发现SystemInit()里确实已经开启了FPU:

第四部包含arm_math.h:

最后贴上浮点运算测试代码:

运行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后,结果计算时间更长了。

使用特权

评论回复
5
cry1109|  楼主 | 2020-11-12 09:33 | 只看该作者
香水城 发表于 2020-11-11 15:14
也不排除你这个是执行时间太短,你的测算方式看不出差别来。

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

计算普通的加减乘除10000次还是看不来差别,时间大概都在297us左右,两种方式的时间相差在1us之内。后面试了exp和cos函数,结果开启FPU后计算时间更慢一些,可以明显看出来差别。

使用特权

评论回复
6
zchong| | 2020-11-12 12:14 | 只看该作者
本帖最后由 zchong 于 2020-11-12 12:16 编辑

看看汇编,确定fpu用起来了,另外注意一下优化,是不是就没执行

使用特权

评论回复
7
香水城| | 2020-11-12 21:36 | 只看该作者
我这边用STM32F4的开发板测试了下,差别还是挺大的。

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

以F4为例,一个是 xxxM4L.lib, 一个是xxxM4LF.lib.

使用特权

评论回复
8
cry1109|  楼主 | 2020-11-14 09:33 | 只看该作者
香水城 发表于 2020-11-12 21:36
我这边用STM32F4的开发板测试了下,差别还是挺大的。

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

城主您好,xxxM4L.lib和xxxM4LF.lib是不是arm_cortexM4l_math.lib和arm_cortexM4lf_math.lib?

使用特权

评论回复
9
香水城| | 2020-12-9 21:39 | 只看该作者
下面这篇你可以看看。

关于STM32浮点运算单元FPU的小话题

使用特权

评论回复
10
liangshuang95| | 2020-12-10 08:59 | 只看该作者
本身计算量很少的话,差距可能不明显吧!

使用特权

评论回复
11
happy0god| | 2020-12-10 12:28 | 只看该作者
**不错啊,学了不少东西

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

172

帖子

4

粉丝