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

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

[复制链接]
zero99 发布时间:2016-6-28 14:40
STM32F3xx/STM32F4xx使用浮点开方指令
: M7 e! }& k& f  V$ M) C
前言
/ X2 [0 m9 d' U/ BSTM32F3xx/STM32F4xx(ARM Cortex-M4内核)中集成了FPU,也就是浮点指令单元,可以将浮点运算变得简单快速,但如果想要发挥出这个浮点运算的最大功效,必须使用浮点指令集,开发者可以直接使用浮点指令集,但目前随着系统的集成度更大,开发者还是希望使用C语言进行编程,还要求执行时间短,当调用DSP_Lib库函数方式,时会有执行时间长的问题,本文以浮点开方为例对此类需求做相关说明。9 j7 A# {3 ?" h+ l6 C0 X: d
. ^6 s" a$ l5 Y. ^' D3 s
Cortex-M4内核浮点指令集8 H% z. s5 H8 D! f2 S4 u
, [8 Z! G8 D4 N% n' z) w
数**算浮点指令
6 Z2 [4 @( ~; N
51.jpg
0 S" A9 t# E, J* S8 x) e; H转移,调用,比较浮点指令 9 }2 R" [  c7 s5 D0 |0 ?
52.jpg 2 O5 T+ j* h+ f. \) {2 {9 N/ p
6 I" Z$ U' M+ L2 r8 O. S7 ~
Keil编译器的浮点开方使用
9 A; }: g( ~, C2 D+ x+ l. {' F* e6 _3 }& G$ a
1) 编译器设定6 T1 U) _8 E! ~$ |( D5 I
首先选择单精度浮点硬件单元4 v* d3 v" Z4 D( V
53.jpg ) _' A/ t! @. D/ V  n( W1 G# U
在Define部分增加ARM_MATH_CM4,__FPU_PRESENT=1,__FPU_USED =1的定义
; s" j# K1 U' ^0 s% l& x# G" `# c
54.jpg
2 p9 R1 y9 h+ D& }8 {2) 加入包含文件#include "math.h"
7 n% W% ~/ `/ y3 R" A% a
55.jpg , i! V) `: J& {& i2 b" j. h$ O! d
3) 加入测试代码
, q) T6 x- R8 Y直接调用内联函数__sqrtf()
* ~# `5 F, w2 A# |. H1 n) c
56.jpg # ]0 L6 J. p3 K* P5 N" x6 e6 G
汇编代码如下, 可以直观看到VSQRT.F32这条直接使用浮点开方运算的指令' B7 n! W4 L+ v5 o, e% l( m! P
57.jpg 6 @- |) |. t9 H
/ T8 @1 \8 b* @8 z; L8 U1 A
IAR编译器的浮点开方使用
" Q7 R: V  _: O5 z7 b/ w: s$ N0 n7 q8 {1 w" U/ z- _3 M
1) 编译器设定
6 |2 E7 {0 Z& d2 y& D- K7 y7 B, D' d选择单精度浮点硬件单元
9 a$ I; ]% ~3 v, m+ d
58.jpg
" Q9 x2 |2 j/ W. v1 N* r2) 加入包含文件#include "math.h"( s7 h: ?, o$ l
59.jpg 1 @. K8 ], {) [" u
3) 加入测试代码  [1 t; S5 ^9 b* g1 U9 m6 i
需要调用sqrtf这个函数 6 C; S9 `3 s& e1 \
60.jpg 9 t* }: e) T; u% ], P
汇编代码如下,可以看到VSQRT.F32这条直接使用浮点开方运算的指令
+ c+ }2 M/ Z# v
61.jpg / q4 _+ {! N8 F8 y# |  I* e3 s
值得说明的是IAR浮点开方调用普通函数库sqrtf,这个函数库中做了数据大于0的判断, 从软件角度上更安全, 但时间会长; 而Keil的函数__sqrtf()实际上是类似inline function的属性,并没有函数调用和返回的指令,更为简单,执行时间短。" X6 r( A, G7 ]3 {
4 j$ |  J: p; k/ O9 N) X
& u# ^# }' {* v% s- v  B# B
文档下载地址:* h% O( H& X: L- z
https://www.stmcu.org.cn/document/list/index/category-1017
8 P) b, J6 x" {0 k
# E% z, f  }' O3 m- m+ k9 P1 D& a2 e实战经验汇总:
$ {7 R5 V( C8 chttps://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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版