打印
[应用相关]

什么是FPU?在stm32编程中应该注意什么?

[复制链接]
691|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sxy4517|  楼主 | 2020-11-5 08:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,大家在平时应用中遇到什么问题吗?什么是FPU?在stm32编程中应该注意什么?

使用特权

评论回复
沙发
sxy4517|  楼主 | 2020-11-5 09:54 | 只看该作者
开启FPU和不开启FPU差距大吗?

使用特权

评论回复
板凳
sxy4517|  楼主 | 2020-11-5 09:55 | 只看该作者
浮点运算一直是定点CPU的难题,比如一个简单的1.1+1.1,定点CPU必须要按照IEEE-754标准的算法来完成运算,对于8位单片机来说已经完全是噩梦,对32为单片机来说也不会有多大改善。虽然将浮点数进行Q化处理能充分发挥32位单片机的运算性能,但是精度受到限制而不会太高。对于有FPU(浮点运算单元)的单片机或者CPU来说,浮点加法只是几条指令的事情。

        现在又FPU或者硬件浮点运算能力的主要有高端DSP(比如TI F28335/C6000/DM6XX/OMAP等),通用CPU(X87数学协处理器)和高级的ARM+DSP处理器等。

        STM32-F4属于Cortex-M4F构架,这和M0、M3的最大不同就是多了一个F-float,即支持浮点指令集,因此在处理数**算时能比M0/M3高出数十倍甚至上百倍的性能,

使用特权

评论回复
地板
sxy4517|  楼主 | 2020-11-5 10:00 | 只看该作者
开启了FPU固然会提高单片机处理浮点数的速度,可带来的弊端是什么呢?

使用特权

评论回复
5
sxy4517|  楼主 | 2020-11-5 11:12 | 只看该作者
当运算中有浮点的数字时要把,数字后面加上一个f。例如表达式中有4.321参与运算。。当你不在4.321后加f时,stm32F405的片子不知道把他当做单精度float用FPU来运算,,默认可能是当做double来运算(我不确定),运算速度还是很慢。

使用特权

评论回复
6
sxy4517|  楼主 | 2020-11-6 07:54 | 只看该作者
STM32F429具有浮点处理器(FPU),在开启FPU的情况下,浮点数运算性能大大提高,配以DSP库的支持,性能尤其出色.

使用特权

评论回复
7
sxy4517|  楼主 | 2020-11-6 08:01 | 只看该作者
对于复杂运算,比如三角函数,开方等运算,如果编程时还是使用math.h头文件,那是没法提升效率的:因为math.h头文件是针对所有ARM处理器的,其运算函数都是基于定点CPU和标准算法(IEEE-754),并没有预见使用FPU的情况,需要很多指令和复杂的过程才能完成运算,也就增加了运算时间。因此要充分发挥M4F的浮点功能,就需要使用固件库自带的arm_math.h,这个文件根据编译控制项(__FPU_USED == 1)来决定是使用那一种函数方法:如果没有使用FPU,那就调用keil的标准math.h头文件中定义的函数;如果使用了FPU,那就是用固件库自带的优化函数来解决问题。

使用特权

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

本版积分规则

55

主题

744

帖子

2

粉丝