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

【经验分享】教你如何在STM32中使用DSP指令

[复制链接]
STMCU小助手 发布时间:2021-9-18 13:07
01 DSP简介
- V- L/ t; p8 R( U  T' h6 e提到DSP,作为电子专业的学生,大部分第一时间想到的是DSP芯片,DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP指令,可以用来快速的实现各种数字信号处理算法。9 M% j# D7 ]' h
% \/ E, p0 T/ R3 j% g2 _9 J* q
; Q9 y, i( l) v3 i- i, j
实际上,DSP的全称是数字信号处理(DigitalSignalProcessing,简称DSP)。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛DSP技术图解的应用。
0 o  u5 k4 T/ Z2 U3 b! Z) f( k" I
6 G/ t! }" O& G  j. {7 |6 }& |
9 s0 I9 S- C0 z, l' U9 E1 F, ?
如下面ARM官方描述的,ARM处理器是支持DSP的。
! [$ e" r8 ~* A! Q3 x0 l+ N
13.png
主要是在cortex-R和Cortex-M内核支持。" D& ?) ]5 Y( `' ^. F
14.png
Arm 的数字信号控制器Cortex-M4、Cortex-M7、Cortex-M33、Cortex-M35P和Cortex-M55处理器满足了对高性能通用代码处理以及数字信号处理应用的需求。  ?! X( {6 d/ O0 p" {
15.png
向Thumb 指令集添加DSP 扩展和可选浮点单元(FPU),旨在提高数值算法的性能。此外,它们提供了直接在 Cortex-M处理器上执行信号处理操作的机会,同时保持Cortex-M程序员模型的易用性。: p9 G4 t7 T! P0 J/ q& a# d4 e
. R$ ^) ~3 G" z
02 IAR中DSP Libary的使用! ~% h, p; w. a; N9 ]9 i
5 t2 O3 J3 B* Y, u& }9 v

6 P- o: e" s# o  v$ g" uArmCortex-M3 /M4处理器提供信号处理指令,例如SIMD(单指令多数据)。特别是Cortex-M4专为DSP应用而设计,它支持高级SIMD,MAC(乘法和累加)指令。此外,Cortex-M4F器件具有FPU(浮点单元),用于处理浮点计算。, g2 }- n; l* }

9 l2 b" u( s5 S9 [6 M+ b  I% S

6 K0 U: `$ t8 ^/ M  K& H$ e9 q* w& D有几种方法可以使用这些指令,例如使用汇编程序例程或内部函数,但最实用的方法之一是使用ArmCortex微控制器软件接口标准(CMSIS)DSP库。CMSIS-DSP库专为Cortex-M处理器而设计,它为数字信号处理提供优化的功能,如矩阵函数,统计函数,高级数学函数等。
& v/ ?/ l, U# e7 a2 \! h
4 L/ t6 E7 I3 R- V8 f. [  {5 b, H

% p: [; {7 |: {9 F  Z# P- qIAREmbedded Workbench forArm中提供了预构建的CMSIS-DSP库及其源代码,在本文中,我们将了解如何将CMSIS-DSP库与IAREmbedded Workbench for Arm一起使用以及如何改进性能。1 @& C  w3 i+ P) {; Q0 {6 }; N

6 G) x+ h1 e  n

+ H( Y, m1 _! c5 ~/ KConfiguringthe CMSIS-DSP library
1 e, c8 G  f: G3 x4 _: H  g$ u% Q3 O( r

+ [7 e" i$ w: E: _配置CMSIS-DSP库
* w5 _3 a- N1 j  A0 B+ L, A; e
16.png
让我们看看如何调用CMSIS-DSP功能及其性能。这里我们将使用sqrt(平方根)函数并与标准数学函数进行比较:/ B; v9 C6 J( G! `7 E4 f4 A& d

  1. : q9 W2 y5 h0 i, N8 z
  2. //#define DSP_Lib
    / _0 P0 o0 R1 ?; i% X+ j! o( T
  3.   D' K& J( b; Y5 w' M
  4. #ifdef DSP_Lib
    # T. F7 h6 E8 b2 f
  5. #include <arm_math.h>8 H/ v$ V7 A$ s% ^
  6. #endif
    6 J- ]$ Q4 v- f/ R

  7. 0 \  u" ^. t% c
  8. #include <math.h>
    ; o. k2 U3 y( q3 N: \
  9. #include <stdio.h>
    1 r4 r; m- ?( u9 ~! `, x; v
  10. int main()
    ) y) X. c& U: }9 R6 Q
  11. {
    4 [  `( @& R, i# \. d
  12. #ifdef DSP_Lib- O: X# y$ O) J# R& ^0 J( ]. V5 c
  13.   float32_t f_input_cmsis_dsp = 2;, Y3 z4 F! J+ L" G
  14.   float32_t f_result_cmsis_dsp;. ?" Q7 P$ P) s" b
  15. #endif
    4 a- ^+ Q; W& H
  16.   ) ]) ?! d9 Y6 I; S4 L
  17.   float f_input = 2;
    3 H# `* g  t! i  |4 h" P) i  e) _
  18.   float f_result;
    % Z  c+ j7 O3 M$ W# U# O
  19.   & ~& w! |* N' R4 `% t
  20. ' [6 X1 x4 i) v8 T% S8 y+ @
  21. #ifdef DSP_Lib
    ( P5 n6 w7 f- G. [- j4 U; {
  22.   /* Using CMSIS-DSP library */+ y: |& E9 c" K1 y: `; c' o# q
  23.   arm_sqrt_f32(f_input_cmsis_dsp,&f_result_cmsis_dsp);
    + W  X/ [$ j9 G& G. |2 W
  24.   printf("f1: %f\n",f_result_cmsis_dsp);& l+ O$ l6 W: _+ o8 s8 E8 F) ]; p
  25. #endif
    # o4 a/ ~4 G" ]# O# V# b: F
  26.   
    ( t1 h9 V, X$ d# Y7 h) ^! G
  27.   /* Standard math function */
    ) n* F  w8 ~- m' f. H$ X. N) W) @
  28.   f_result = sqrt(f_input);' ], `* u* j  |# z9 l4 }4 F. H
  29.   printf("f2: %f\n",f_result);9 ~5 j& i! E( j, ?+ v0 X
  30.   3 F* i, Q6 f3 a1 Q# Q
  31.   return 0;
    % ^; P! ^5 F, Y+ w: I0 J) Y4 U. x
  32. }
复制代码
结果如下
1 C+ E/ b+ V/ {% K
  1. f1: 1.414214
    5 G1 k3 y% h& `
  2. f2: 1.414214
复制代码
接下来,让我们来看看性能。) `* h7 i/ N6 X  @% Q
! F4 ?) t: ^; q6 V# k; s5 \9 Y
  _! I% c# c: W; ^+ ]! Q
IAREmbedded Workbench中的CYCLECOUNTER寄存器可用于检查正在运行的代码所消耗的周期数。在检查上次执行的C/ C ++源代码或汇编程序步骤期间的循环次数时,CCSTEP寄存器非常方便有用。
8 z; m0 _& P) T* L# A: f) u, e
17.png
设置断点并记下sqrt函数的CCSTEP值:1 S3 o8 ~0 r* D) b5 ?/ y* Z
18.png
在这种情况下,CMSIS-DSPsqrt功能比标准数学函数快10倍以上。
. U& T+ g  u2 M6 M/ ]! U
  1. arm_sqrt_f32 :    52 cycles
    ; A% r1 Q9 X+ E8 F3 k+ f7 Z
  2. sqrt :            752 cycles
复制代码
从这个简单的例子中,我们可以看到CMSIS-DSP非常易于使用,并且显着提高了性能。
5 B  s9 C: H2 p; h! n$ i/ c6 a% I+ h

# C5 K0 A/ P6 }5 V6 G' U
赞 收藏 评论0 发布时间:2021-9-18 13:07

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版