ガレスタさんのDIY日記

電子回路、Web、組み込み、自作エフェクターを語るblog

STM32でCMSIS DSPを使ってみるその2

stm32 Advent Calendar 2017 5日目の記事です。

ARM CMSIS DSPライブラリを使ってみようという記事です。

以前書いたCMSIS DSPの記事の追記です。
2017/12/4時点でのMacOS,SW4STM32,STM32F7環境でのCMSIS DSP導入説明です。
gsmcustomeffects.hatenablog.com

前回と異なる点は

  • リポジトリから最新版を利用*1
  • MacOS環境でSW4STM32を使っている。(インストール方法が若干変わったので注意*2

です。

早速やって行きましょう。


CMSIS DSPダウンロード

まずGithubのARM CMSISリポジトリからDSP関連のファイルをダウンロードします。
github.com

git cloneでもzipでもなんでもいいと思います。

プロジェクトの作成

CubeMXを用いてプロジェクトを作ります。今回はCortexM7で試していくのでF7系列のであればなんでもいいと思います。
僕の環境では以前書いた記事に合わせるためにSTM32F767 Nucleoを使用して行きます。

まずCubeMXでプロジェクトを作ります。

次にクロックの設定などを済ませてSW4STM32でプロジェクトを生成します。

その次にSW4STM32にインポートをします。

CMSIS DSPをプロジェクトに追加する

ダウンロードしてきたCMSIS DSPファイルをプロジェクトに配置します。
ファイルを解凍するとこのような配置になっているかと思います。
f:id:gsmcustomeffects:20171203231216p:plain

これをCMSISのフォルダにこのように配置する。
f:id:gsmcustomeffects:20171209145421p:plain

CubeMXの生成プロジェクトには元からこの3つのファイルが入っていますがこちらも最新版の方に差し替えます。
f:id:gsmcustomeffects:20171209145757p:plain

プロジェクトの設定

次にコンパイルオプションの指定をして行きます。
C/C++ Build/Setting/Tool Settings/MCU GCC Compiler/MiscellaneousのOther flag項目で

-c -fmessage-length=0 -fno-strict-aliasing -fno-builtin -ffunction-sections -fdata-sections

これを指定することで未参照コードを削減してバイナリザイズを削減できます。(最初このオプションしてなくて200KBとかになってた)

f:id:gsmcustomeffects:20171209150753p:plain

プリプロセッサ項目で

__FPU_PRESENT
ARM_MATH_CM7

を追加します。

f:id:gsmcustomeffects:20171209150953p:plain

コードを書いていく

次にコードを書いて行きます。
まずInclude文を書いて行きます。

#include "arm_math.h"

これでコンパイルが取ればあとはAPIを用いてDSPライブラリを使用することができます。

f:id:gsmcustomeffects:20171209151053p:plain

このようにコード内でブレークしたり逆アセンブルを見ることができます。
f:id:gsmcustomeffects:20171209182755p:plain

f:id:gsmcustomeffects:20171209182807p:plain

f:id:gsmcustomeffects:20171209182850p:plain

使用例など

以下記事リンクをはっています。

gsmcustomeffects.hatenablog.com

gsmcustomeffects.hatenablog.com

gsmcustomeffects.hatenablog.com

まとめ

STM32はCortexM7を複数リリースしており目玉機能のDSP系の導入記事が少なかったので書いて見た。
Cube自体の説明はあるがDSPに関してはドキュメントが結構あれでKEIL向けの導入が目立っている。
コンパイル済みライブラリはCubeにも含まれているがlinkerオプションでリンクしなければならないので多少手間がかかる。そんな中CMSIS5のリポジトリDSP自体のコードも公開されているのを知ったので今回の方法を試して見たという経緯である。
この方法ではlinker命令を手打ちする必要もないし最新版のコードを拾ってこれるのでCube自体のアップデートを待たなくてもいいという利点がある。そのほかにもディスアセンブルを自分で確認してきちんとDSP命令に置き換えられているかなど最適化のチェックに役立つなどデバッグ関連の利点もある。

実際に試してDSPライブラリの中身が気にならない人は.aファイルを素直にリンクした方が手っ取り早いです。
やり方はその1に書いてますのでそちらを参照してください。

gsmcustomeffects.hatenablog.com

以上がれすたさんでした。

*1:ちょくちょく更新されていてissueへの対応がされていてこちらの方が安心して使用できる

*2:.runファイルで配布されているのでshコマンドでインストールしないといけなくなった