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

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

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

+ _" C: z- D; I" I& l; S前言" f* u, w3 [0 R0 l, z' q
STM32F3xx/STM32F4xx(ARM Cortex-M4内核)中集成了FPU,也就是浮点指令单元,可以将浮点运算变得简单快速,但如果想要发挥出这个浮点运算的最大功效,必须使用浮点指令集,开发者可以直接使用浮点指令集,但目前随着系统的集成度更大,开发者还是希望使用C语言进行编程,还要求执行时间短,当调用DSP_Lib库函数方式,时会有执行时间长的问题,本文以浮点开方为例对此类需求做相关说明。! e0 }& u6 a$ `* J5 i  T0 o
* Y# p( A; s' f9 |& W/ }
Cortex-M4内核浮点指令集
' g5 d9 t$ O. \2 X
, f$ Z' k2 y# D3 w4 i3 _$ c7 S, J数**算浮点指令% t5 h. Q/ l  y( f
51.jpg # L4 b/ s, b: y+ P1 s% o
转移,调用,比较浮点指令 , i* A4 A% ^  o; o
52.jpg 7 L# s+ X* t# F4 `

$ n$ I1 Y1 S0 i. o9 ^  \Keil编译器的浮点开方使用
% T% i/ V9 ~; _: R4 H! W' P( C, h, L
0 G7 f& x% m" w* B' {+ K( z3 k1) 编译器设定. G7 S! T9 T. y2 x
首先选择单精度浮点硬件单元
) P/ a* i  e- a  B+ R9 i0 U6 ~
53.jpg
8 i8 J1 a# p+ I& Q) f9 i+ }在Define部分增加ARM_MATH_CM4,__FPU_PRESENT=1,__FPU_USED =1的定义
( ~! o/ y$ F% I; g, X# x
54.jpg
- X7 d9 j' G" E! _9 E% S2) 加入包含文件#include "math.h"
9 D  r# P' o1 o+ c& W- ~
55.jpg
9 _% y# g, ?0 R2 Q/ M9 n3 ]' {, q3) 加入测试代码
2 e. {; C, L9 |9 X2 a直接调用内联函数__sqrtf() " a4 _$ S% U% H7 V& ^. q# }
56.jpg 7 o' ?8 G/ w, |8 c
汇编代码如下, 可以直观看到VSQRT.F32这条直接使用浮点开方运算的指令; i. }9 O" p8 t/ q1 R6 E
57.jpg " H3 `, x6 T+ E5 ]: w
% T2 o' a% o; M1 q6 J* e" C- R
IAR编译器的浮点开方使用
! ~. M; ~+ e7 N+ Z# E) m; s) f5 |# p( d# H7 L, o7 a
1) 编译器设定
, ?6 z0 l/ K+ B8 a9 b/ Y) r选择单精度浮点硬件单元
! d3 }: W) h/ y: g4 U0 P5 M
58.jpg # B; J7 p  ^. m1 l
2) 加入包含文件#include "math.h"
6 O3 s. T6 t  a7 d% E4 E
59.jpg 3 c( m/ F9 \6 M% v
3) 加入测试代码
5 V9 C8 h8 V* l$ ?! K& R, e需要调用sqrtf这个函数 9 N8 _" [) j* C; H$ J1 p3 V
60.jpg ' D8 O6 R) ^& B/ [. V
汇编代码如下,可以看到VSQRT.F32这条直接使用浮点开方运算的指令( v6 T- }8 F, ?% r( s
61.jpg : X4 N/ Y& @( c" J7 F( P
值得说明的是IAR浮点开方调用普通函数库sqrtf,这个函数库中做了数据大于0的判断, 从软件角度上更安全, 但时间会长; 而Keil的函数__sqrtf()实际上是类似inline function的属性,并没有函数调用和返回的指令,更为简单,执行时间短。9 w5 x' P/ f$ y% R2 B# D

7 e  N7 H4 \: W$ r
& Y' U' A  F" w% F- A文档下载地址:
- W, e. @% p5 d, Ihttps://www.stmcu.org.cn/document/list/index/category-1017
- |' r7 w5 c7 v! D/ g  G% y% z8 t+ A! z5 A, k7 k! n
实战经验汇总:8 f/ \0 u, [+ X. M$ g$ f
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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版