你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
zero99 发布时间:2016-6-28 14:40
STM32F3xx/STM32F4xx使用浮点开方指令

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

Cortex-M4内核浮点指令集

数**算浮点指令
51.jpg
转移,调用,比较浮点指令
52.jpg

Keil编译器的浮点开方使用

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

IAR编译器的浮点开方使用

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


文档下载地址:
https://www.stmcu.org.cn/document/list/index/category-1017

实战经验汇总:
https://www.stmcu.org.cn/module/forum/thread-576401-1-1.html
收藏 2 评论3 发布时间:2016-6-28 14:40

举报

3个回答
jcx0324 回答时间:2016-11-23 16:04:59
内联函数__sqrtf()    在哪里找的?不熟悉的人根本不知道这个,  还有这个跟调用dsp库的开放有区别吗
zengyi703-16313 回答时间:2016-11-23 19:40:00
谢楼主分享
andypanfan 回答时间:2016-11-24 08:48:24
感谢楼主的分享

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版