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

【实战经验】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
感谢楼主的分享

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

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