最近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の選択画面が以下に。
Add projectを押す直前の状態が以下に。
さてNew projectを作ってもらうと以下のようなディレクトリ構成のプロジェクトができます。mbed OS2用のライブラリ等が使えるようにセットアップはしてくれているようです。main.cppの中身は Blink (Lチカ)になってます。
なお、Mbed Librariesのタブを開くと、以下のようなメッセージが入ってます。MbedOS2でもライブラリバージョンが複数あるので、特定バージョンを使いたいときに参照できるような配慮です。Online Compiler側の情報を見れば、昔のプロジェクトでどの版を参照していたのかわかると思います。今回は、デフォルトで設定してくれたOS2の最新版らしいものそのままとしました。
Keil Studio Cloudは、ローカルストレージのファイルのドラッグ・アンド・ドロップに対応しています。本体 main.cppを上書きし、SDR_Libraryをディレクトリ丸ごとアップロードすれば下記のようになります。なお、忘れずにターゲットボードも選択(NUCLEO_F446RE)しておかねばなりません。
上記のようにKeil Studio Cloudはアップロードしたファイルにエラーを検出したようで赤の×印を出してきています。見てみると下記のようでした。
ただし、上記はまだ main.cpp しかKeil Studio Cloudが解析できていない状態での出力なので、いろいろファイルを開いているとエラーは倍くらいの数に増えました。
書き直しは嫌だな、と思いつつ、「まあやってみよう」とビルドボタンを押してみました。すると以下のようです。
いくつか文句があるみたいですが、Build succeeded、そしてバイナリファイルも生成されています。
実際に実機にバイナリを書き込んでみたらSDRのAMラジオが動作しましたです。
どうもKeil Studio Cloudのエディタ環境で出るエラーはOS6で新しいコンパイラ(バージョン6?)前提のメッセージであり、必ずしもOS2用のビルドを阻止するものではないようです。勿論、OS2でもフェイタルになるようなエラーであればビルドできませんが。本物のエラーと「疑似エラー(将来版エラー)」が混在するというのは若干メンドイですが、オブジェクトコードは生成できた、と。
同じソースでOS6であったれば
新たにOS6の空プロジェクトを生成し、同一ソースでビルドを試みてみました。
やはりエディタレベルでエラーが報告されます。さきほどのOS2のときより少ない?
しかし、ビルドは不成功。オブジェクトは作られませんでした。以前に別シリーズに書きましたが、OS2時代にあった Serial オブジェクトはOS6では廃止になってます。代わりに BufferedSerialオブジェクトを使わないとならないのですが、SerilaとはAPIが異なります。結構あちこち直さないとOS6には行けなさそうだったので、今回はここで止めました。
※2022年10月21日追記:上記のソースのOS6対応を別シリーズにて実施済です。こちら。やっつけで小手先な対応なんだけれども。
なお、新しいコンパイラだと以前のコンパイラ(バージョン5?)とは挙動も異なるようで、以下のpragmaもwarningになってました。
まあ、とりあえず Keil Studio Cloudでもビルドできるみたいだからいいか。