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

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

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

+ t0 Q! L- Q  M( c, z前言- m" F- L- u7 y9 }) k
STM32F3xx/STM32F4xx(ARM Cortex-M4内核)中集成了FPU,也就是浮点指令单元,可以将浮点运算变得简单快速,但如果想要发挥出这个浮点运算的最大功效,必须使用浮点指令集,开发者可以直接使用浮点指令集,但目前随着系统的集成度更大,开发者还是希望使用C语言进行编程,还要求执行时间短,当调用DSP_Lib库函数方式,时会有执行时间长的问题,本文以浮点开方为例对此类需求做相关说明。
6 S2 L6 F, z( L# `1 o' x' |+ f1 i; d( \' I  P- m
Cortex-M4内核浮点指令集9 B4 t/ U( P% p1 h

2 A  \4 O" U: j5 D) W. r, ^0 c数**算浮点指令/ p, S" W; b# F- B
51.jpg
, _2 s6 O* r' y3 V! D. ^转移,调用,比较浮点指令 , |0 u9 o- Q" @# ^& a( ]: o- e
52.jpg / e8 w) T. Z6 |% ~* D4 C

, b, E! `* t- u) q# b7 LKeil编译器的浮点开方使用
9 [3 U0 u/ l1 g' ^+ y
9 [6 W' d* m. d1) 编译器设定
) A# k3 ~8 B* e" i首先选择单精度浮点硬件单元; A( d! @# x" a  L4 r/ X/ ~
53.jpg
9 D+ }2 w1 s& f# i1 T9 L- r: g在Define部分增加ARM_MATH_CM4,__FPU_PRESENT=1,__FPU_USED =1的定义6 R) R5 f! [$ y# Y1 b* T' s; ?/ q
54.jpg + d5 N# W2 ?, k2 i, L6 }4 ?/ R  p
2) 加入包含文件#include "math.h"# ~* I0 f% M: g* w  h
55.jpg 6 a% r5 Z3 I* ]1 Z
3) 加入测试代码& O2 @5 q* D/ {, G# ?4 H
直接调用内联函数__sqrtf()
9 T: J/ L: i( d; t& M
56.jpg
9 U  S; P' e8 O- I) x; G% S. Y汇编代码如下, 可以直观看到VSQRT.F32这条直接使用浮点开方运算的指令% H; E- ]9 K# T! f6 o
57.jpg 9 L5 X5 @; u4 W& k- p

$ u% l& q8 \$ f, C8 P  rIAR编译器的浮点开方使用
6 @# Z3 T  p+ N8 I  ]/ G/ @+ F* `$ N# O0 a
1) 编译器设定) d9 p$ Z$ f! z% S. }8 S
选择单精度浮点硬件单元
% J% x' x; {9 k* W# Q: x
58.jpg
' l9 N: |* A- p+ [2) 加入包含文件#include "math.h"
9 u# f2 F1 u; G* y3 j
59.jpg & B) l# R( E0 E7 i( D: m
3) 加入测试代码
) u( N, x) G" J" Z' v8 i& U需要调用sqrtf这个函数 ' h& `9 k' g$ |7 F* R. t, q
60.jpg " ]+ p$ F& P# K
汇编代码如下,可以看到VSQRT.F32这条直接使用浮点开方运算的指令
, D+ `' u0 U) Q5 w6 j# W' }" v" f6 O
61.jpg % _1 O7 m4 m  Z, N* s" P
值得说明的是IAR浮点开方调用普通函数库sqrtf,这个函数库中做了数据大于0的判断, 从软件角度上更安全, 但时间会长; 而Keil的函数__sqrtf()实际上是类似inline function的属性,并没有函数调用和返回的指令,更为简单,执行时间短。. @7 r+ P% {+ R3 |
/ a+ Y( V' M. F6 r2 ~2 d
( g/ L9 N; H0 R9 x
文档下载地址:- t$ y% H. V# Z( p4 A& m
https://www.stmcu.org.cn/document/list/index/category-10174 I6 o3 o4 M8 s' z; L
% c  g1 `4 @. U8 S0 ]( j& c
实战经验汇总:
; v# j4 k% E; j4 ahttps://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 手机版