?01、DSP簡介
提到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程式員模型的易用性,
02、IAR中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(平方根)函式并與標準數學函式進行比較:?
//#define DSP_Lib #ifdef DSP_Lib #include <arm_math.h> #endif #include <math.h> #include <stdio.h> int main() { #ifdef DSP_Lib float32_t f_input_cmsis_dsp = 2; float32_t f_result_cmsis_dsp; #endif float f_input = 2; float f_result; #ifdef DSP_Lib /* Using CMSIS-DSP library */ arm_sqrt_f32(f_input_cmsis_dsp,&f_result_cmsis_dsp); printf("f1: %f\n",f_result_cmsis_dsp); #endif /* Standard math function */ f_result = sqrt(f_input); printf("f2: %f\n",f_result); return 0; }
結果如下
f1: 1.414214 f2: 1.414214
?接下來,讓我們來看看性能,
IAREmbedded Workbench中的CYCLECOUNTER暫存器可用于檢查正在運行的代碼所消耗的周期數,在檢查上次執行的C/ C ++源代碼或匯編程式步驟期間的回圈次數時,CCSTEP暫存器非常方便有用,
?
?
在這種情況下,CMSIS-DSPsqrt功能比標準數學函式快10倍以上,?
arm_sqrt_f32 : 52 cycles sqrt : 752 cycles
從這個簡單的例子中,我們可以看到CMSIS-DSP非常易于使用,并且顯著提高了性能,
點擊查看本文所在的專輯,STM32F207教程
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/308072.html
標籤:嵌入式
