教你如何在STM32中使用DSP指令

商务办公
提到DSP,作为电子专业的学生,大部分第一时间想到的是DSP芯片,DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP指令,可以用来快速的实现各种数字信号处理算法。

[[420574]]

本文转载自微信公众号「知晓编程」,作者Firefly。转载本文请联系知晓编程公众号。

01DSP简介

提到DSP,作为电子专业的学生,大部分第一时间想到的是DSP芯片,DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP指令,可以用来快速的实现各种数字信号处理算法。

实际上,DSP的全称是数字信号处理(DigitalSignalProcessing,简称DSP)。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛DSP技术图解的应用。

如下面ARM官方描述的,ARM处理器是支持DSP的。

主要是在cortex-R和Cortex-M内核支持。

Arm 的数字信号控制器Cortex-M4、Cortex-M7、Cortex-M33、Cortex-M35P和Cortex-M55处理器满足了对高性能通用代码处理以及数字信号处理应用的需求。

向Thumb 指令集添加DSP 扩展和可选浮点单元(FPU),旨在提高数值算法的性能。此外,它们提供了直接在 Cortex-M处理器上执行信号处理操作的机会,同时保持Cortex-M程序员模型的易用性。

02IAR中DSP Libary的使用

ArmCortex-M3 /M4处理器提供信号处理指令,例如SIMD(单指令多数据)。特别是Cortex-M4专为DSP应用而设计,它支持高级SIMD,MAC(乘法和累加)指令。此外,Cortex-M4F器件具有FPU(浮点单元),用于处理浮点计算。

有几种方法可以使用这些指令,例如使用汇编程序例程或内部函数,但最实用的方法之一是使用ArmCortex微控制器软件接口标准(CMSIS)DSP库。CMSIS-DSP库专为Cortex-M处理器而设计,它为数字信号处理提供优化的功能,如矩阵函数,统计函数,高级数学函数等。

IAREmbedded Workbench forArm中提供了预构建的CMSIS-DSP库及其源代码,在本文中,我们将了解如何将CMSIS-DSP库与IAREmbedded Workbench for Arm一起使用以及如何改进性能。

Configuringthe CMSIS-DSP library

配置CMSIS-DSP库

让我们看看如何调用CMSIS-DSP功能及其性能。这里我们将使用sqrt(平方根)函数并与标准数学函数进行比较:

  1. //#define DSP_Lib 
  2.  
  3. #ifdef DSP_Lib 
  4. #include <arm_math.h> 
  5. #endif 
  6.  
  7. #include <math.h> 
  8. #include <stdio.h> 
  9. int main() 
  10. #ifdef DSP_Lib 
  11.   float32_t f_input_cmsis_dsp = 2; 
  12.   float32_t f_result_cmsis_dsp; 
  13. #endif 
  14.    
  15.   float f_input = 2; 
  16.   float f_result; 
  17.    
  18.  
  19. #ifdef DSP_Lib 
  20.   /* Using CMSIS-DSP library */ 
  21.   arm_sqrt_f32(f_input_cmsis_dsp,&f_result_cmsis_dsp); 
  22.   printf("f1: %f\n",f_result_cmsis_dsp); 
  23. #endif 
  24.    
  25.   /* Standard math function */ 
  26.   f_result = sqrt(f_input); 
  27.   printf("f2: %f\n",f_result); 
  28.    
  29.   return 0; 

结果如下

  1. f1: 1.414214  
  2. f2: 1.414214 

接下来,让我们来看看性能。

IAREmbedded Workbench中的CYCLECOUNTER寄存器可用于检查正在运行的代码所消耗的周期数。在检查上次执行的C/ C ++源代码或汇编程序步骤期间的循环次数时,CCSTEP寄存器非常方便有用。

设置断点并记下sqrt函数的CCSTEP值:

在这种情况下,CMSIS-DSPsqrt功能比标准数学函数快10倍以上。

  1. arm_sqrt_f32 :    52 cycles 
  2. sqrt :            752 cycles 

 

从这个简单的例子中,我们可以看到CMSIS-DSP非常易于使用,并且显着提高了性能。

 

责任编辑:武晓燕 来源: 知晓编程
相关推荐

2009-09-23 13:04:58

HibernateOracle sequ

2021-05-06 08:54:39

串口DMASTM32

2021-05-20 07:26:22

DMASTM32数据

2022-07-25 14:31:55

LiteOS开发工具

2018-10-15 10:15:30

STM32Linux经验

2021-12-22 06:56:07

STM32C语言内存

2022-10-10 08:24:15

编程数据逻辑语句

2022-04-30 09:41:14

LinuxNTP服务器

2022-12-08 08:00:00

.NET 7BitArray数据执行

2019-09-04 19:32:56

HiveFlink大数据

2022-01-07 08:24:13

STM32枚举结构体

2021-03-06 21:21:11

STM32单片机追踪库

2016-08-11 10:43:56

2019-08-26 09:20:29

Windows 10虚拟桌面Windows

2020-11-30 11:55:07

Docker命令Linux

2019-09-16 19:00:48

Linux变量

2014-07-02 09:47:06

SwiftCocoaPods

2024-09-06 11:34:15

RustAI语言

2020-04-09 10:18:51

Bash循环Linux

2021-03-09 07:27:40

Kafka开源分布式
点赞
收藏

51CTO技术栈公众号