APM32F411硬件FPU使用方法及注意点
创作时间:
作者:
@小白创作中心
APM32F411硬件FPU使用方法及注意点
引用
CSDN
1.
https://m.blog.csdn.net/ic2121/article/details/139815480
APM32F411是一款基于32位Arm Cortex-M4F内核的微控制器,其内置的硬件FPU(浮点运算单元)能够显著提升浮点运算的效率。本文将详细介绍如何开启硬件FPU,并通过实际测试案例展示其性能优势。
1. 如何开启硬件FPU
在system_apm32f4xx.c文件的SystemInit()函数中,需要确保__FPU_PRESENT(是否带有FPU)和__FPU_USED(是否开启FPU)都设置为1。从M4权威指南手册可以查到,SCB->CPACR寄存器的配置如下:
实际应用中,CP10和CP11一般都设置为11。
KEIL软件提供了一个非常方便的开启硬件FPU功能选项。在KEIL的“Target”界面中,将“Floating Point Hardware”选项选择为“Single Precision”,即可完成硬件FPU的开启。
2. 测试案例
为了直观感受硬件FPU的运算速度,我们基于极海官网APM32F4xx_SDK_V1.4的GPIO_Toggle例程进行测试,将APM32F411系统时钟设置为100MHz。
2.1 开启和不开启FPU的测试
测试代码如下:
void test_function(void) {
float data_a = 1.0;
float data_b;
for (int i = 0; i < 200; i++) {
data_b = data_a * 3.14159;
}
}
通过逻辑分析仪抓取PE6引脚的高低电平,评估代码执行时间。
- 不开启硬件FPU的IO翻转时间约207.56us:
- 开启硬件FPU的IO翻转时间约218.64us:
令人意外的是,开启硬件FPU的运算时间反而更慢。这是因为参与运算的浮点型常量3.14159默认是double类型,而M4/M4F的硬件FPU只对单精度浮点数(float)加速。
从汇编代码可以看出,不开启硬件FPU计算需要189个机器周期,开启硬件FPU计算需要191个机器周期,差了2个机器周期。
2.2 浮点型常量加f后缀后的测试
将浮点型常量加上f后缀,测试代码变为:
void test_function(void) {
float data_a = 1.0f;
float data_b;
for (int i = 0; i < 200; i++) {
data_b = data_a * 3.14159f;
}
}
测试结果如下:
- 不开启硬件FPU的IO翻转时间约73.48us
- 开启硬件FPU的IO翻转时间约16.4us
从汇编代码对比可以看出,不开启硬件FPU计算需要60个机器周期,开启硬件FPU计算需要11个机器周期,差了49个机器周期。
3. 测试总结
硬件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%。
热门推荐
关于母爱的现代诗
视频号如何隐私设置:全面保护你的个人信息
牙齿翻瓣手术有必要做吗?重度牙周炎患者的治疗选择与费用考量
如何选择适合的家居家具?这种选择对家居舒适度有何影响?
上海消保委实测:同店同商品3个平台3个价,有的划线价相差近1倍
大爆冷!二号种子出局!向鹏4-1逆风翻盘!国乒男单独苗剑指冠军!
仁川赛:向鹏4-0横扫李尚洙夺冠,单局轰11-0他是如何做到的?
GitHub 使用指南:开发者不可或缺的工具
《魔术师的奇遇》:揭秘魔术背后的神秘世界
陕西历史博物馆参观攻略讲解
跳水健将全红婵:从天才少女到双冠王的传奇之路
5G移动网络运维:从设备管理到网络优化的全方位指南
孤独星球的旅行者:独自探险的意义
手冲咖啡三段式冲泡法:从入门到精通的完整指南
李小龙:武术传奇与文化桥梁
如何在ETF投资中做出合理的选择?这种选择如何实现投资目标?
如何通过朋友圈内容吸引HR注意?
敏捷开发中的迭代规划与执行策略
如何在研发项目中有效应对技术的迅速老化
怎么在股票跌价时做出合理的购买决策?这种购买决策有哪些风险?
ERP的模式五金分类有哪些种类 ERP模式下五金分类全解析
如何为自己起一个既有趣又独特的个性网名指南
海南购物攻略:免税天堂与本土特色必买清单
把子肉是徐州的还是济南的?别争了,有答案了!
供暖结束,呼吸道“闹脾气”?中医良方助力轻松应对
北京有许多不为人知的小众景点,你知道吗?
如何在清明节祭父:从痛苦到释怀,走过人生的四个阶段
膝骨关节炎:病因、症状及治疗和康复训练方法
髋关节疼痛的7种疾病和7个缓解动作
南沙楼市,不是取消限购就能解决问题