今回は高速に三角関数とかを計算できるARM社提供ライブラリであるCMSIS DSPライブラリを使ってみる話です。
こいつを使うとsin,cosとかよく使う三角関数やaddとかを高速に処理できます。
そのほかFIR,IIRと言ったデジタルフィルタ用のAPIだったり制御用のAPIもあるのでつかわない手はないです。
導入
今回の実習環境は以下の通りです
- IDE:AtollicTrueStudio
- Board:STM32F767 Nucleo144
CubeMXで適当にプロジェクトを作ってビルドが通るとこまで作っておきます。
スタティックライブラリの追加
次にコンパイル済みのライブラリを追加していきます。
オブジェクト自体はCubeF7のフォルダ内にあります。
場所を調べるには
CubeMX上記メニューからhelp->UpdaterSettingでパスをコピーします
ファイルエクスプローラーでそこに移動します。
するとこんな感じのファイル構成になっていると思います
オブジェクトは以下のPATHにあります。
STM32Cube\Repository\STM32Cube_FW_F7_V1.6.0\Drivers\CMSIS\Lib
三つありますがダブルポイント(倍精度)かシングル(単精度)かを選ぶ。
今回はF767なのでdpがついてるlibarm_cortexM7lfdp_math.aを選びます。
それをコピーしてプロジェクト直下にいれます。
プロジェクトの設定
プロジェクトのプロパティーを開く
「C/C++Build」/GCC linker/Miscellaneous欄で
Linker、LibrariesでDSP処理のLinkerとかを設定していく
Librariesに下記を追加。
arm_cortexM7lfdp_math.a
ものによってはエラーになるので.aをなくした版で試して見てください
arm_cortexM7lfdp_math
コードを書いていく
ヘッダーをインクルードします。
#include "arm_math.h"
今回は試しに平方根でもやってみます。
FastMathのとこに入ってます。
CMSIS DSP研究室さんで詳しく解説されています。
APIとしては
arm_sqrt_f32 (float32_t in,float32_t * pOut )
を用います
こんな感じに書いた
まとめ
- DSPライブラリを導入できた
- FastMath使った割に速度については検討してないので今後やって行きたい