[信息] 【实战经验】STM32F3xx/STM32F4xx使用浮点开方指令

[复制链接]
2066|1
 楼主| 香水城 发表于 2016-6-28 12:01 | 显示全部楼层 |阅读模式
本帖最后由 香水城 于 2017-8-14 12:52 编辑

STM32F3xx/STM32F4xx使用浮点开方指令

前言
STM32F3xx/STM32F4xx(ARM Cortex-M4内核)中集成了FPU,也就是浮点指令单元,可以将浮点运算变得简单快速,但如果想要发挥出这个浮点运算的最大功效,必须使用浮点指令集,开发者可以直接使用浮点指令集,但目前随着系统的集成度更大,开发者还是希望使用C语言进行编程,还要求执行时间短,当调用DSP_Lib库函数方式,时会有执行时间长的问题,本文以浮点开方为例对此类需求做相关说明。

Cortex-M4内核浮点指令集

数**算浮点指令
1.PNG
转移,调用,比较浮点指令
2.PNG

Keil编译器的浮点开方使用

1) 编译器设定
首先选择单精度浮点硬件单元
3.PNG
在Define部分增加ARM_MATH_CM4,__FPU_PRESENT=1,__FPU_USED =1的定义
4.PNG
2) 加入包含文件#include "math.h"
5.PNG
3) 加入测试代码
直接调用内联函数__sqrtf()
6.PNG
汇编代码如下, 可以直观看到VSQRT.F32这条直接使用浮点开方运算的指令
7.PNG

IAR编译器的浮点开方使用

1) 编译器设定
选择单精度浮点硬件单元
8.PNG
2) 加入包含文件#include "math.h"
9.PNG
3) 加入测试代码
需要调用sqrtf这个函数
10.PNG
汇编代码如下,可以看到VSQRT.F32这条直接使用浮点开方运算的指令
11.PNG
值得说明的是IAR浮点开方调用普通函数库sqrtf,这个函数库中做了数据大于0的判断, 从软件角度上更安全, 但时间会长; 而Keil的函数__sqrtf()实际上是类似inline function的属性,并没有函数调用和返回的指令,更为简单,执行时间短。

对应PDF:STM32F3xx_STM32F4xx使用浮点开方指令
更多实战
经验请看: 【ST MCU实战经验汇总贴】

wenunit 发表于 2016-6-28 12:28 | 显示全部楼层
好** ,值得一顶....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17195

帖子

291

粉丝
快速回复 在线客服 返回列表 返回顶部