请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
zero99 发布时间:2016-6-28 14:40
STM32F3xx/STM32F4xx使用浮点开方指令
# D/ L, L0 s9 s% z) t# w
前言: g+ _# h5 ^' p! _7 n. Q
STM32F3xx/STM32F4xx(ARM Cortex-M4内核)中集成了FPU,也就是浮点指令单元,可以将浮点运算变得简单快速,但如果想要发挥出这个浮点运算的最大功效,必须使用浮点指令集,开发者可以直接使用浮点指令集,但目前随着系统的集成度更大,开发者还是希望使用C语言进行编程,还要求执行时间短,当调用DSP_Lib库函数方式,时会有执行时间长的问题,本文以浮点开方为例对此类需求做相关说明。
' P2 i" U* h0 ]4 y
0 b0 M2 l0 Z# D  O2 _- _1 I7 |9 l# LCortex-M4内核浮点指令集
! i% K  Y9 Q/ @7 n: L  {
1 u6 s7 M+ F  N- b3 v( `数**算浮点指令  B7 L" ]3 ]+ G+ F, S
51.jpg & r1 @' Q7 {. X/ E7 ?5 D' M  j) L
转移,调用,比较浮点指令
0 l' `8 `- g1 d, s8 s
52.jpg 2 v! _: U4 G9 `5 P

" i$ R9 C$ Z- B: {$ @! FKeil编译器的浮点开方使用
) e! X: D( `* A
: E$ u- f, Z# O* R" {$ j' w1) 编译器设定7 l% o1 ?3 j& X  G6 Q
首先选择单精度浮点硬件单元5 [9 i; [$ o7 g0 H
53.jpg ; @3 I$ z- \7 b6 w3 y2 p* \
在Define部分增加ARM_MATH_CM4,__FPU_PRESENT=1,__FPU_USED =1的定义% x  ^/ H& V' n5 ]
54.jpg
* M( X" D+ g/ ?- ~4 Y8 S8 z2) 加入包含文件#include "math.h"  O& M9 [  N9 T5 C: ?3 m6 Y
55.jpg
6 t. u" y% J2 o! }3) 加入测试代码2 ~9 M' G% l; J' G7 u& S7 H3 a* ]
直接调用内联函数__sqrtf() : K. x$ R1 x% m) _/ {- _4 u
56.jpg . w! e5 V9 |6 n. |
汇编代码如下, 可以直观看到VSQRT.F32这条直接使用浮点开方运算的指令0 c: |8 k' U" C
57.jpg
' [* l3 L2 Y$ o4 J; ]. g; w
: K5 c$ c) d5 l6 Q3 e$ VIAR编译器的浮点开方使用; ?9 t" l8 ^# U# v: P

! d2 {; o# g5 b1 s; N1) 编译器设定
4 S& X9 ]9 M" w# Q0 k+ |选择单精度浮点硬件单元
5 i/ g6 D. R0 h- u* {
58.jpg
4 ]# D/ w/ n& [7 J6 e3 X  i2) 加入包含文件#include "math.h": f! ]/ L8 O( l* x) w% c- x5 W
59.jpg
. I2 q2 x+ [5 k, V3) 加入测试代码9 b2 {: {( A5 _0 m0 W
需要调用sqrtf这个函数 0 u2 r2 b; e3 q% t
60.jpg
% ?/ O4 P9 f" _, }& n) z, G0 {! x汇编代码如下,可以看到VSQRT.F32这条直接使用浮点开方运算的指令  b, Q# N+ _/ o- |$ U8 M
61.jpg
" j5 i# a' n1 z$ N  c值得说明的是IAR浮点开方调用普通函数库sqrtf,这个函数库中做了数据大于0的判断, 从软件角度上更安全, 但时间会长; 而Keil的函数__sqrtf()实际上是类似inline function的属性,并没有函数调用和返回的指令,更为简单,执行时间短。) u* {/ G0 ?# [" G& Y& B; s

) v8 l) E3 G( T! U
; G& C  l6 I( s: n文档下载地址:( n$ u' O! {6 N' G9 o# D; U0 q
https://www.stmcu.org.cn/document/list/index/category-10174 {$ ]$ C: Z+ _7 y, Z4 l/ y2 v( j5 W
" j! X) {' b5 U: M4 i' N6 `
实战经验汇总:8 F! A$ X% u" ~
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 手机版