成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

商務(wù)辦公
提到DSP,作為電子專業(yè)的學(xué)生,大部分第一時間想到的是DSP芯片,DSP芯片的內(nèi)部采用程序和數(shù)據(jù)分開的哈佛結(jié)構(gòu),具有專門的硬件乘法器,廣泛采用流水線操作,提供特殊的DSP指令,可以用來快速的實現(xiàn)各種數(shù)字信號處理算法。

[[420574]]

本文轉(zhuǎn)載自微信公眾號「知曉編程」,作者Firefly。轉(zhuǎn)載本文請聯(lián)系知曉編程公眾號。

01DSP簡介

提到DSP,作為電子專業(yè)的學(xué)生,大部分第一時間想到的是DSP芯片,DSP芯片的內(nèi)部采用程序和數(shù)據(jù)分開的哈佛結(jié)構(gòu),具有專門的硬件乘法器,廣泛采用流水線操作,提供特殊的DSP指令,可以用來快速的實現(xiàn)各種數(shù)字信號處理算法。

實際上,DSP的全稱是數(shù)字信號處理(DigitalSignalProcessing,簡稱DSP)。在過去的二十多年時間里,數(shù)字信號處理已經(jīng)在通信等領(lǐng)域得到極為廣泛DSP技術(shù)圖解的應(yīng)用。

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

主要是在cortex-R和Cortex-M內(nèi)核支持。

Arm 的數(shù)字信號控制器Cortex-M4、Cortex-M7、Cortex-M33、Cortex-M35P和Cortex-M55處理器滿足了對高性能通用代碼處理以及數(shù)字信號處理應(yīng)用的需求。

向Thumb 指令集添加DSP 擴展和可選浮點單元(FPU),旨在提高數(shù)值算法的性能。此外,它們提供了直接在 Cortex-M處理器上執(zhí)行信號處理操作的機會,同時保持Cortex-M程序員模型的易用性。

02IAR中DSP Libary的使用

ArmCortex-M3 /M4處理器提供信號處理指令,例如SIMD(單指令多數(shù)據(jù))。特別是Cortex-M4專為DSP應(yīng)用而設(shè)計,它支持高級SIMD,MAC(乘法和累加)指令。此外,Cortex-M4F器件具有FPU(浮點單元),用于處理浮點計算。

有幾種方法可以使用這些指令,例如使用匯編程序例程或內(nèi)部函數(shù),但最實用的方法之一是使用ArmCortex微控制器軟件接口標準(CMSIS)DSP庫。CMSIS-DSP庫專為Cortex-M處理器而設(shè)計,它為數(shù)字信號處理提供優(yōu)化的功能,如矩陣函數(shù),統(tǒng)計函數(shù),高級數(shù)學(xué)函數(shù)等。

IAREmbedded Workbench forArm中提供了預(yù)構(gòu)建的CMSIS-DSP庫及其源代碼,在本文中,我們將了解如何將CMSIS-DSP庫與IAREmbedded Workbench for Arm一起使用以及如何改進性能。

Configuringthe CMSIS-DSP library

配置CMSIS-DSP庫

讓我們看看如何調(diào)用CMSIS-DSP功能及其性能。這里我們將使用sqrt(平方根)函數(shù)并與標準數(shù)學(xué)函數(shù)進行比較:

  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; 

結(jié)果如下

  1. f1: 1.414214  
  2. f2: 1.414214 

接下來,讓我們來看看性能。

IAREmbedded Workbench中的CYCLECOUNTER寄存器可用于檢查正在運行的代碼所消耗的周期數(shù)。在檢查上次執(zhí)行的C/ C ++源代碼或匯編程序步驟期間的循環(huán)次數(shù)時,CCSTEP寄存器非常方便有用。

設(shè)置斷點并記下sqrt函數(shù)的CCSTEP值:

在這種情況下,CMSIS-DSPsqrt功能比標準數(shù)學(xué)函數(shù)快10倍以上。

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

 

從這個簡單的例子中,我們可以看到CMSIS-DSP非常易于使用,并且顯著提高了性能。

 

責(zé)任編輯:武曉燕 來源: 知曉編程
相關(guān)推薦

2009-09-23 13:04:58

HibernateOracle sequ

2021-05-20 07:26:22

DMASTM32數(shù)據(jù)

2021-05-06 08:54:39

串口DMASTM32

2022-07-25 14:31:55

LiteOS開發(fā)工具

2018-10-15 10:15:30

STM32Linux經(jīng)驗

2022-04-30 09:41:14

LinuxNTP服務(wù)器

2019-09-04 19:32:56

HiveFlink大數(shù)據(jù)

2022-12-08 08:00:00

.NET?7BitArray數(shù)據(jù)執(zhí)行

2022-10-10 08:24:15

編程數(shù)據(jù)邏輯語句

2021-12-22 06:56:07

STM32C語言內(nèi)存

2019-08-26 09:20:29

Windows 10虛擬桌面Windows

2016-08-11 10:43:56

2022-05-17 08:25:10

TypeScript接口前端

2022-06-23 08:00:53

PythonDateTime模塊

2021-06-09 09:36:18

DjangoElasticSearLinux

2021-03-09 07:27:40

Kafka開源分布式

2015-08-27 09:46:09

swiftAFNetworkin

2024-01-18 08:37:33

socketasyncio線程

2011-08-10 09:31:41

Hibernateunion

2019-09-16 19:00:48

Linux變量
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩三级一区 | 久久久久免费精品国产小说色大师 | 亚洲国产精品一区二区三区 | 久久久123| 日韩在线免费 | www.4虎影院 国产999精品久久久影片官网 | 成人黄在线观看 | 一二三区在线 | 超碰97免费观看 | 国产婷婷色一区二区三区 | 久久久久国产精品 | 国产欧美一区二区三区在线看 | 欧美精品网| 国产伦精品一区二区三区高清 | 亚洲一区亚洲二区 | 亚洲高清在线 | 日韩精品在线观看一区二区三区 | 国产精品欧美精品 | 日本免费一区二区三区四区 | 日韩精品影院 | 亚洲视频中文字幕 | 精品成人一区二区 | 中文字字幕一区二区三区四区五区 | 一区二区三区视频免费看 | 一本一道久久a久久精品蜜桃 | 有码一区 | 青青草原综合久久大伊人精品 | 香蕉婷婷 | 国产一区二区三区在线 | 亚洲一区二区成人 | 亚洲女优在线播放 | 中文字幕亚洲精品 | 国产在线永久免费 | 狠狠爱综合| 免费毛片www com cn | 成人精品国产一区二区4080 | 国产国拍亚洲精品av | 中文字幕电影在线观看 | 亚洲一区二区在线播放 | 亚洲第一在线视频 | 免费一级欧美在线观看视频 |