我目前使用的是STM32F413, 开发环境是RTT-STUDIO,项目中使用到了正余弦,正切等浮点运算函数,想请教下,在RTT-STUDIO 环境中,如何配置,使能FPU模块呢?谢谢
查看更多
默认是打开FPU的,在项目上右键选属性,然后点击到下图中的c/c++构建 - 设置,其中的Float ABI就是配置FPU的,Library soft就是表示不使用FPU,其他的是开启FPU。
c/c++构建 - 设置
Float ABI
微信截图_20200728201702.png
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部
感谢你的回复,那再请教下,默认开启了FPU后,实际我要调用sin 等函数的时候,是不是不能包含math.h, 需要包含哪个呢?
不管有没有开启FPU,math.h都是可以用的,FPU开启时由编译器自动产生浮点指令,没有开启时编译器会用整数操作指令来模拟。
谢谢回复,不过我看了一些文章介绍,好像和你说的有一些出入, 我看的这篇文章:
https://blog.csdn.net/u012308586/article/details/95593163
文章中说 如果使用FPU,需要包含 arm_math.h, 并且,sin等函数,也需要使用arm_sin_f32 类似的,请问,是两种都可以,还是说,哪边说的有些不准确呢?
1,arm_math.h是CMSIS DSP中的数学库头文件,区别在于它是提供源码的,并且写法可以方便编译器使用SIMD指令进行优化,比如可以使用并行加减法。
2,math.h引用的是编译工具链带的数学库头文件,由编译器自动进行链接,编译器会根据你的FPU类型选择去链接数学库中不同的函数,下面是针对keil中的armcc lib的分析:
在gcc中,gcc会根据你是否选择FPU以及选择的FPU类型去链接不同的库函数,在
RT-ThreadStudio\repo\Extract\ToolChain_Support_Packages\ARM\GNU_Tools_for_ARM_Embedded_Processors\5.4.1\arm-none-eabi\lib\armv7e-m
这个目录以及子目录下一共有5种libm.a可以供gcc编译器自动选择谢谢,感谢你的回复,很详细
@zhangjun 您好,我这边在RTT-STUDIO的设置中,Float ABI设置为hard了,但是发现与设置为softfp,调用算法性能是一样的,并没有提升,不知道是怎么回事,是FPU没起作用?还需要怎么设置才能让FPU起作用呢?
@zhangjun 您好,我能这么理解吗,就是只要打开FPU的设置,就能够使得浮点运算加速,和调用什么函数无关,那如果我也不用math的函数,如果直接是0.1*8.2这种运算呢,也可以加速吗?