手習ひデジタル信号処理(57) Keil Cloud StudioでSDRソースをビルド

Joseph Halfmoon

最近Arm社Online Compilerを直接は開けなくなりました(まだ使えますが。)今後は否が応でもKeil Studio Cloudのようです。しかし、三上先生のSDRの御ソースはOnline CompilerでMbed OS2前提です。今回はKeil Studio Cloudへの移行を試みてみました。

※「手習ひデジタル信号処理」投稿順 Indexはこちら

※教科書として読ませていただいておりますのは、以下の三上先生の御本です。

CQ出版社『Armマイコンでつくるダイレクト・サンプリングSDR

元記事はCQ出版社トラ技誌の2021年連載です。上記はそれをまとめたPDF版のダウンロードサイトへのリンクです。

三上先生のSDRのビルド

以下の回では、ダウンロードした三上先生のビルド済のオブジェクトコードを使って、実際にSDRでラジオを聞いていました。

手習ひデジタル信号処理(49) SDRで高校野球、甲子園中継(NHK第1)受信OKよ

ようやくAM復調を、部品レベルで一渡り手習ひできたので、実際にソースからビルドしようと思ったら、はよKeil Studio Cloudへ移れ、というArm社の思し召しです。勝手知ったるOnline Compilerであればビルドは定型作業ですが、Keil Studio Cloudへ持ち込むとなると若干の不安があります。なぜならば、

    • Keil Studio Cloudは、基本 Mbed OS6向け、OS2もビルドできるハズだが、「できる」けれど「あまり力が入っていない」感じがする。
    • 三上先生の御ソースは「バリバリ」Mbed OS2向け
まずはOS2用にビルド

最初は、Keil Studio CloudのメニューからNew projectの作成です。Mbed OS6やOS5の場合、複数のExample projectのチョイスがあり、その中に empty Mbed OS projectもあります。ソースがあるのであれば empty 指定でプロジェクトを生成すればよいのです。ところが、Mbed OS2の場合、チョイスは一つだけ、

mbed2-example-blinky

のみです。仕方がないのでblinkyでプロジェクトを作ってしまいます。

New Projectの選択画面が以下に。

os2step1

Add projectを押す直前の状態が以下に。

os2step2

さてNew projectを作ってもらうと以下のようなディレクトリ構成のプロジェクトができます。mbed OS2用のライブラリ等が使えるようにセットアップはしてくれているようです。main.cppの中身は Blink (Lチカ)になってます。

os2step3

なお、Mbed Librariesのタブを開くと、以下のようなメッセージが入ってます。MbedOS2でもライブラリバージョンが複数あるので、特定バージョンを使いたいときに参照できるような配慮です。Online Compiler側の情報を見れば、昔のプロジェクトでどの版を参照していたのかわかると思います。今回は、デフォルトで設定してくれたOS2の最新版らしいものそのままとしました。os2step3B

Keil Studio Cloudは、ローカルストレージのファイルのドラッグ・アンド・ドロップに対応しています。本体 main.cppを上書きし、SDR_Libraryをディレクトリ丸ごとアップロードすれば下記のようになります。なお、忘れずにターゲットボードも選択(NUCLEO_F446RE)しておかねばなりません。

os2step4

上記のようにKeil Studio Cloudはアップロードしたファイルにエラーを検出したようで赤の×印を出してきています。見てみると下記のようでした。

os2step4error

ただし、上記はまだ main.cpp しかKeil Studio Cloudが解析できていない状態での出力なので、いろいろファイルを開いているとエラーは倍くらいの数に増えました。

書き直しは嫌だな、と思いつつ、「まあやってみよう」とビルドボタンを押してみました。すると以下のようです。os2step5

いくつか文句があるみたいですが、Build succeeded、そしてバイナリファイルも生成されています。

実際に実機にバイナリを書き込んでみたらSDRのAMラジオが動作しましたです。

どうもKeil Studio Cloudのエディタ環境で出るエラーはOS6で新しいコンパイラ(バージョン6?)前提のメッセージであり、必ずしもOS2用のビルドを阻止するものではないようです。勿論、OS2でもフェイタルになるようなエラーであればビルドできませんが。本物のエラーと「疑似エラー(将来版エラー)」が混在するというのは若干メンドイですが、オブジェクトコードは生成できた、と。

同じソースでOS6であったれば

新たにOS6の空プロジェクトを生成し、同一ソースでビルドを試みてみました。os6step1

やはりエディタレベルでエラーが報告されます。さきほどのOS2のときより少ない?

os6step1error

しかし、ビルドは不成功。オブジェクトは作られませんでした。以前に別シリーズに書きましたが、OS2時代にあった Serial オブジェクトはOS6では廃止になってます。代わりに BufferedSerialオブジェクトを使わないとならないのですが、SerilaとはAPIが異なります。結構あちこち直さないとOS6には行けなさそうだったので、今回はここで止めました。

※2022年10月21日追記:上記のソースのOS6対応を別シリーズにて実施済です。こちら。やっつけで小手先な対応なんだけれども。

なお、新しいコンパイラだと以前のコンパイラ(バージョン5?)とは挙動も異なるようで、以下のpragmaもwarningになってました。

os6step1Warning

まあ、とりあえず Keil Studio Cloudでもビルドできるみたいだからいいか。

手習ひデジタル信号処理(56) SDR、AM復調できてもまだやることがあったデス へ戻る

手習いデジタル信号処理(58) Scilab、連続時間信号と離散時間信号のプロット へ進む