电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

359

主题

364

帖子

2891

积分

三级会员

Rank: 3Rank: 3

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

iyo50d13a4y6404968954.png

iyo50d13a4y6404968954.png

* K' M1 ]/ _, ?5 O$ }& \. y! t- |
只要STM32或者其他32位单片机,自带FPU功能,就可以加速float类型数据的加减乘除运算。
$ D) u; [* p0 [, |# f2 ^5 ]6 z- _! V
在STM32中要启用FPU,需要启动满足两个宏:(__FPU_PRESENT == 1) && (__FPU_USED == 1)
/ j- J3 A7 e2 m' c" G2 j& [0 e

zajpyn0hm426404969054.png

zajpyn0hm426404969054.png

( B0 V9 e: ?: a9 x- n% I  x; W4 X% t) E* {1 h, E# J
' m8 t' l: {: h

b25oyiwcfws6404969154.png

b25oyiwcfws6404969154.png

1 y$ o8 M: U# n
+ C3 l2 x2 ]( g0 X! D& P在keil的魔术棒中,如上图所示,直接选中单精度浮点运算器,keil就会自动把所需的宏给定义出来。如何验证是否开启成功?. ~1 F/ Z* N) |* E+ n& o5 \0 W
. z. ~/ |* ~1 ?
' c6 [* r/ W  P* p验证方法1:
# e8 E% r6 D& j& ?运行单片机程序,不选中/选中FPU,分别做10万次乘法:发现耗时不同,则说明开启FPU成功了。
* w* [/ i: r, j/ L$ [" P# x& g8 C/ p# Y: ~  e: K4 T& V" U& C( L8 b& C" a0 n, a3 W, i$ P
验证方法2:; U. o+ ~/ h6 _6 r+ O
9 w) C7 e7 I8 H/ V; M, |进入debug模式,或者直接查看汇编文件,发现C语言乘法运算,被编译成了V打头的汇编乘法命令,说明开启成功。/ e2 J: V# P9 k" |+ c" f% P) C! K! h+ _1 Z! W5 {( p/ _+ ~; \! q* W

6 Y# P& X0 H; X! X

b4eex4pnamh6404969255.png

b4eex4pnamh6404969255.png

: {4 x1 G  G" }# Y; f2 t
1 G8 ?4 H& H5 u! V( K/ n4 J

1 v6 ]1 M2 c% oFPU只能加速float的基本运算,还有一些数学函数,不是光靠FPU就能加速的,例如sin、cos、等函数,ARM,ST,GD,APM等厂商提供了优化过的三角函数等,建议直接使用。# s. C  g$ N, \" Q' N! ?
$ I+ E4 V) z9 B( B
素材来源:ST官方
; I( b9 k: Q4 }4 g: S' g) K6 {==========
, d6 O6 Q; {: y往期回顾:【项目陪跑--无线CAN转发器】第一章 课程概述& x( e- c$ m7 u1 C, F# ~* }
【通知】上市公司嵌入式工程师带队授课,成品展示~~+ v6 o$ v0 A% t# h0 T! Y
蓝桥杯物联网教程汇总_2405293 C/ p5 I, x: a7 i
==========
  ]# D/ Q! B1 O" ^" w) p( R" d& @7 a1 V  |

oya3fayg2nf6404969355.png

oya3fayg2nf6404969355.png
' J4 L' L: a; b$ o

% w! N0 _0 B- o5 A6 C2 A

lb4i4psvc4k6404969455.png

lb4i4psvc4k6404969455.png
. }; J$ Q) e6 j3 U
9 q! e3 _9 s7 k+ R

lmb2x1jgv4w6404969555.png

lmb2x1jgv4w6404969555.png
回复

使用道具 举报

发表回复

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

本版积分规则


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