发新帖本帖赏金 30.00元(功能说明)我要提问
返回列表
打印
[新品上市]

APM32F411硬件FPU使用方法及注意点

[复制链接]
986|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#有奖活动#  #申请原创#
1、前言
APM32F411是一款基于32Arm Cortex-M4F内核的微控制器。硬件FPUArm Cortex-M4F的一大优势。合理应用硬件FPU可以大大缩短运算时间。
2、如何开启硬件FPU
system_apm32f4xx.c文件的SystemInit()函数里,有下图所示语句:
__FPU_PRESENT(是否带有FPU)和__FPU_USED(是否开启FPU)都为1时,硬件FPU才算成功开启。
M4权威指南手册可以查到,SCB->CPACR的寄存器信息如下图所示:
实际应用中,CP10CP11一般都设置为11
KEIL软件提供了一个非常方便的开启硬件FPU功能选项。如下图所示,点击KEIL的“魔法棒”菜单。“Target”界面中的“Floating Point Hardware”选项选择“Single Precision”。点击“OK”,完成硬件FPU开启。
3、测试
通过实例测试,感受一下硬件FPU的运算速度。根据极海官网APM32F4xx_SDK_V1.4的的GPIO_Toggle例程修改,APM32F411系统时钟设置为100MHz
3.1 开启和不开启FPU测试
部分测试代码,如下图所示。主函数包括两个函数:LED2PE6)引脚翻转函数和测试函数。测试函数主要内容是重复执行200data_b = data_a * 3.14159的乘法运算。
通过逻辑分析仪抓取PE6的高低电平,评估代码执行时间。
不开启硬件FPUIO翻转时间约207.56us,如下图所示。
开启硬件FPUIO翻转时间约218.64us,如下图所示。
什么情况?开启硬件FPU的运算时间居然比不开启硬件FPU的运算时间要慢。
很多人使用M4/M4F产品,往往会忽略一个细节。参与运算的浮点型常量3.14159C语言中默认是double类型常量。M4/M4F的硬件FPU只对单精度浮点数运算加速。所以,对double类型浮点数运算无效。
为什么开启硬件FPU的运算时间比不开启硬件FPU的运算时间要慢?我们从汇编代码可以看出,同样的一条乘法运算语句,不开启硬件FPU计算需要10816 - 10627 = 189个机器周期,开启硬件FPU计算需要10883 - 10692 = 191个机器周期,差了2个机器周期。
不开启硬件FPU的乘法运算汇编代码及机器周期数如下图所示:
开启硬件FPU的乘法运算汇编代码及机器周期数如下图所示:
3.2 浮点型常量都加f后缀,开启和不开启FPU测试
float类型数值的取值范围是-3.402823466×1038~3.402823466×1038,可以满足大部分应用。测试代码的浮点型常量加上后缀f,其他内容与3.1章节一致,如下图所示。
不开启硬件FPUIO翻转时间约73.48us,如下图所示。
开启硬件FPUIO翻转时间约16.4us,如下图所示。
这才是我们想要的效果。从汇编代码对比,同样的一条乘法运算语句,不开启硬件FPU计算需要10737 - 10677 = 60个机器周期,开启硬件FPU计算需要11176 - 11165 = 11个机器周期,差了49个机器周期。
不开启硬件FPU的乘法运算汇编代码及机器周期数如下图所示:
开启硬件FPU的乘法运算汇编代码及机器周期数如下图所示:
4、结论
测试结果如下表所示。
硬件FPU
浮点型常量
运行时间
data_b = data_a * 3.14159运算时间
不开启
不带f后缀
207.56us
189个机器周期
不开启
f后缀
73.48us
60个机器周期
开启
不带f后缀
218.64us
191个机器周期
开启
f后缀
16.4us
11个机器周期
计算没有超出float类型数值取值范围的情况,建议浮点型常量都加上后缀f,可以缩短运算时间。
如果没有float类型数值运算,可以不开启硬件FPU
对于float类型数值运算,建议开启硬件FPU,可以大大缩短运算时间。比如,该例程的语句乘法运算,开启硬件FPU的运算比未开启硬件FPU的运算少了49个机器周期数,运算时间提升约81.67%

5、参考例程


使用特权

评论回复

打赏榜单

21小跑堂 打赏了 30.00 元 2023-09-27
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
21小跑堂 2023-9-27 18:57 回复TA
介绍如何开启单片机的FPU并通过进行浮点运算测试效果,同时对开启FPU后可能遇到的问题进行探究并进行总结。 
沙发
kenny01| | 2023-9-26 09:05 | 只看该作者
学习一下,APM32F411硬件FPU使用方法及注意点,感谢楼主分享

使用特权

评论回复
板凳
austin99822| | 2023-10-8 10:22 | 只看该作者
学习了

使用特权

评论回复
发新帖 本帖赏金 30.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

24

帖子

0

粉丝