电子产业一站式赋能平台

PCB联盟网

搜索
查看: 133|回复: 0
收起左侧

如何提高单片机的运算效率之FPU

[复制链接]

359

主题

364

帖子

2891

积分

三级会员

Rank: 3Rank: 3

积分
2891
发表于 2024-8-14 21:00:00 | 显示全部楼层 |阅读模式

uvd0s042eqa64016755736.png

uvd0s042eqa64016755736.png
, {, g+ K; \# S

3 R4 N5 t! z' x# p7 x$ E, l5 p只要STM32或者其他32位单片机,自带FPU功能,就可以加速float类型数据的加减乘除运算。
8 u* _0 @; C  g- ^, n: N
0 `4 ?' C" j) q8 ^在STM32中要启用FPU,需要启动满足两个宏:(__FPU_PRESENT == 1) && (__FPU_USED == 1)/ B8 J: E: y/ `& R8 x0 ?0 y4 h' q

nwfuo10k35z64016755836.png

nwfuo10k35z64016755836.png

! d$ l7 l% l: D% \7 k  \
+ W* ?6 x& r4 K; L6 ^- J4 A1 A- X- R% e, C, h

r252hs5z4ep64016755936.png

r252hs5z4ep64016755936.png
2 t6 k) W! v6 J5 V- q5 Y. d; `4 q

, S5 [$ q8 W+ Q在keil的魔术棒中,如上图所示,直接选中单精度浮点运算器,keil就会自动把所需的宏给定义出来。如何验证是否开启成功?
- _7 Q( j$ n% e. `. z. ~/ |* ~1 ?
1 ^4 e) E0 w* n验证方法1:) V5 K' U  [3 Y: L# X4 j% c
运行单片机程序,不选中/选中FPU,分别做10万次乘法:发现耗时不同,则说明开启FPU成功了。- g: {9 x2 h* u* ~2 T
# x& g8 C/ p# Y: ~  e: K4 T1 J( t' P6 K& b! \! \8 D
验证方法2:; U. o+ ~/ h6 _6 r+ O
8 |7 e7 x5 H3 Z# F" F$ \5 n进入debug模式,或者直接查看汇编文件,发现C语言乘法运算,被编译成了V打头的汇编乘法命令,说明开启成功。/ e2 J: V# P9 k" |+ c" f% P* s% f/ Y: D' X/ A8 O
0 d. D- `  ]1 p7 n9 l: b

apitrxwdm3n64016756036.png

apitrxwdm3n64016756036.png
" I7 ~$ T' E6 r  e0 _5 u

! w/ R) N' F& L' i. z4 V6 B4 K0 H, l$ N- X
FPU只能加速float的基本运算,还有一些数学函数,不是光靠FPU就能加速的,例如sin、cos、等函数,ARM,ST,GD,APM等厂商提供了优化过的三角函数等,建议直接使用。( J  O: c: O9 e  h1 }

, t6 S; L% ~: S  @8 o素材来源:ST官方% a3 n2 Z% t- J, E" g! D
==========
: U; V* b/ f& Y往期回顾:【项目陪跑--无线CAN转发器】第一章 课程概述5 ~' t0 h  R0 V; T" H/ S7 a% U
【通知】上市公司嵌入式工程师带队授课,成品展示~~
$ ?' @' Z; x1 u7 P( L蓝桥杯物联网教程汇总_240529, O# x/ k6 d# t4 a! F: J! }
==========
' L' L: g" ~6 T3 r+ l" E" o) Z& Y2 @: Z

s2p34jn4a4i64016756136.png

s2p34jn4a4i64016756136.png

+ H$ ]! N: C; n3 d/ L: _; H) V
1 ^1 D1 c+ x! Z5 m8 {! K

3ej50evtnel64016756236.png

3ej50evtnel64016756236.png
- }0 g& ^/ }) z# k% n1 d$ Q: ^

/ ]+ C9 I  Z( e- p4 _4 v* C

1mtabl2rwk364016756336.png

1mtabl2rwk364016756336.png
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表