モダンOSのお砂場(33) Mbed OS6、bare metal profile、Lチカ

Joseph Halfmoon

今回から Mbed OS6の bare metal profile というものを触ってみたいと思います。Mbed OS6のコアなRTOS部分を「欠いた」プロファイルです。しかし見てみるとマルチタスクっぽいこともできるみたい。毎度お世話になってきたMbed OS2の引っ越し先?それにVSCode+PlatformIOでビルドからデバッグまで出来る。なかなかじゃん。

今回のターゲット・ボードは、ST Microelectronics社製 Nucleo F401REボードといたしました。兄弟ボードのF446REが「手習ひデジタル信号処理」で活躍している裏で遊休状態だったので活を入れてやろう、と。なお、別件で活躍中のF446REの開発環境はMbed のWebコンパイラで、OSはMbed OS2です。

Mbedの開発には、実にいろいろな環境があります。主要なところでも

  • Arm Mbed Compiler(Web環境)
  • Mbed CLI (ローカル環境、CLI)
  • Mbed Studio (ローカル環境、GUI)

など。こんどArm傘下のKeilのKeil StudioというWeb環境も使えるようになるみたいだし、サードベンダツールもあるしで、どれを選んでよいやら目が回ります。その中で今回はお馴染みVSCodeで開発できるPlatformIOを使おうと。何といっても、ビルドからデバッグまでほぼ「お任せ」で環境出来てしまう「お楽」な感じが一番。PlatformIOの Nucleo F401REボードに関する情報が以下に。

docs.platformio.org ST Nucleo F401RE

また、Mbed OS6 の bare metal profile についての情報は以下に。

Mbed OS bare metal profile

さて吉例Lチカを

何時ものことですが、新たなターゲット、新たなプラットフォームを使ってみる最初は、吉例Lチカでございます。大抵の場合、Lチカのサンプルプログラムが「ころがっている」もんです。書く必要もありません。PlatformIOのProject Exampleで、”ST STM32″プラットフォーム用のExampleを調べるとありました。これが Mbed OS6 baremetal profileでのLチカ例です。

mbed-rtos-blink-baremetal

インポートしてビルドすれば、よほど何か間違えていない限り動くはず。しかし一点注意が。インポートされる platformio.ini ファイルです。インポート時には以下2つのボードが指定されてました。401がデフォで含まれている。人気者だな。

iniFile
このまま何も考えずにビルドかけると、上記2つのターゲットボード用に2回ビルドがかかります。初回のビルドには結構時間かかるので時間が勿体ないです(過去、別機種で4つもターゲットがあるのをビルドしてしまい、とても長い時間かかったので身にしみました。)ターゲットではない、env:nucleo_f103rbを削除しました。

さらに気になるのは、uploadのプロトコルとか、debuggerの指定、標準出力に使うUARTのボーレートなどの設定です。通常、platformio.ini ファイルに設定を書き込むこと必要があるもの。今回は以下のような感じでした。

  1. upload_protocolのデフォルトはstlinkなので明示的に書かずとも良い。
  2. debugもデフォルトはstlinkなので明示的に書かなくてよい。
  3. UARTは何も指定しない、ソースコード側でも設定しない、という状態で9600ボーでPlatformIO内蔵のシリアルモニタに接続できた。

かなりお楽。何もする必要がありません。

ビルドしてLチカ

後でデバッグするときに「ウオッチする変数」が欲しかったので、1点だけソースに追加しました。ループの度にインクリメントされる loop_countという変数です。この値をLチカの度に標準出力に垂れ流しておきます。最初 count という変数名で宣言したらエラーになりました。どうも「誰か」別に使っている人がいるみたい。

ビルド後、走らせてPlatformIO内蔵のシリアルモニタで出力を見張ったところが以下に。

monitor
なお、通常ビルド時には、Debug にするか Release にするか指定するものですが、今回は不要でした。これまたお楽。通常のビルドは Release です。そしてPlatformIOからデバッガ起動する場合には指定せずとも Debug モードで再ビルドされます。もちろん、iniファイルに明示的に書く、というのも可能ですが、とりあえずこれで不便はありませぬ。

デバッガ起動し、loop_count変数をウオッチしたところが以下に。

MbedDebug000
走らせると分かりますが、STlink でのデバッグは結構速いです(RISC-Vデバッガでのデバッグが遅すぎるのか。。。)

ブレークポイントまで走らせたところが以下に。

MbedDebug001
ちゃんとウオッチ式働いているし、反応も早くて、いいね。

一応、Mbed OS6のバージョン(手元のローカル環境にインストール済のもの)は以下でした。

MbedOSversion
最新版は 6.15 らしいのでチョイ古い感じ。きっと更新のお知らせのところに案内が入っているかもです。でもま、高度なところを触るわけではないので、多分、このままでも十分だけれども。

モダンOSのお砂場(32) FreeRTOS、割り込みハンドラからタスクにキュー へ戻る

モダンOSのお砂場(34) Mbed OS6、EventQueueを使ってみる へ進む