モダンOSのお砂場(17) Zephyr RTOS、VS Codeでサンプル・ビルド

Joseph Halfmoon

唐突にMicroPythonネタを別シリーズとしたので、こちらは「純粋OS」?で進めて行きたい(どこへ?)と思います。仕切り直しの初回は気になっていたRTOS、”Zephyr” であります。サンプル・プログラムをビルドして走らせ、デバッガ起動して中身を覗くところまでやってみました。VS CodeとPlatformIOの威力であまり考えずにできてしまう。。。

※「モダンOSのお砂場」投稿順Indexはこちら

しばらく更新を怠けていると、VS CodeもPlatformIOも大量の更新がたまってきます。PlatformIO関係のライブラリの更新をゆるゆるかけながら、気になったのが “Zephyr” の文字であります。だいたいなんて発音するのか分からないです。でも偉大なGoogle検索に

zephyr 発音

と問いかければ発音を教えてくれました。カタカナで書くと「ゼファ」ってな感じ。ついでに意味を問えば、「西風」みたいです。そよ風、間違っても烈風ではない。文学的だな~。以下にZephyr RTOSのご本家のURLを貼り付けました。

The Zephyr Project

上の方にこれ見よがしに”THE LINUX FOUNDATION PROJECTS”の文字が見えます。看板背負ってるんだし、という感じ。RTOSらしいけれど、結構、手持ちのマイコン・ボードにも対応しているものが多いです。対応ボードの中には micro:bit(V1)すら含まれています。かなり少ないリソースのマイコンでも利用できる、ということでしょう。この「プロジェクト」の背景についてはMonoistさんの以下の記事がとても参考になりました。

インテルのIoT戦略から生まれたRTOS「Zephyr」は徒花で終わらない

起源はWind Riverだったんだあ。古い人間なので、Wind Riverと問いかけられれば、VxWorksと合言葉。RTOSとしては古株な上に高級なイメージ。しっかりした組み込みシステムに載っているRTOS。しかし上の記事読むと、Wind Riverもいろいろ「翻弄」されていたのね、知らなかったです。ま、お陰でWind River源流のOSをタダで使える。良い世の中になったものです。

さらにいえば VS Code上のPlatformIOがZephyrサポートしてくれているお陰でビルド環境の構築など超簡単。くりくりやっていれば「ぼーっと生きていても」皆やってくれてしまう。

さてサンプルのビルドの手順おさらいいたします。なお、今回ターゲットといたしますのは、

STマイクロエレクトロニクス社、Nucleo F401REボード

であります。

まずは、VS Code上でPlatformIOのHomeを開きます。こんな感じ。

PlatformIO project example右下の方にある Project Examples を選択。とりあえず

zephyr

などとして絞り込むのですが、大量に出てきます。それだけ多くのマイコンに移植済ということであります。とりあえず一番簡単そうな「Lチカ」を選びます。

zephyr-blink

であります。ただし気をつけないとならないのは、自分のターゲットマイコン用のzephyr-blinkを選ばないとなりません。下の例ではNordic nRF51用とST STM32用のzephyr-blinkが見えていますが、各種マイコン用にこれでもかという数あります。Nucleoの場合、STM32の下のzephyr-blink選択。

Select STM32 Zephyr-blinkするとPIOが自動でプロジェクトをセットアップしてくれます。楽ちんですが、多分初回はいろいろダウンロードして持ってくるのでかなり時間がかかります。気長に待ちます。

プロジェクトがセットアップされたところで、嬉しくなって即座にビルドしてしまうと以下のような結果が出るまでかなり待たされます。これは

platformio.ini

内でSTM32マイコンでも4種類についてビルドするようになっているからです。それも、手持ちのボードでないものばかり。

zephyrBlinkSampleBuildターゲットのF401REだけをビルドするようにplatformio.iniを書き換えてからビルドした方が無駄な時間を使わずに済んだです。一応、F401REのときの設定がこちら。

[env:nucleo_f401re]
platform = ststm32
framework = zephyr
board = nucleo_f401re

気を取り直してビルドいたしました。そしてボードに書き込み。OKです。動作いたしました(最上部のアイキャッチ画像はLチカしているところ。)

ただソースを眺めて気になったのが、点滅させているのが LED0 というところ。Nucleoボードの場合、ユーザが勝手に点滅させてよい「ユーザLED」はLD2というお名前の2番です。0番はアンタッチャブル。まあ、インストールされたライブラリのソースを調べたら、結局LD2の端子をLED0と読み替えていました。他のシステムとソース互換にするためのようです。

走ったOKだけでは芸がないので(芸が無いのはいつものことですが)、デバッグかけてみました。NucleoにはST-LINKが搭載されているのでボードだけでデバッグ可能です。その様子がこちら。起動後main先頭に止まったところ。

Set Break point赤丸のブレークポイントに向けて実行ボタンで何度か走らせてみます。ローカル変数のダンプウインドウの表示例がこちら。デバッガ動いています。

variable TrueちゃんとZephyr RTOS勉強しよう。。。本当か?

モダンOSのお砂場(16) FreeRTOS、BLEサンプルコードを読む に戻る

モダンOSのお砂場(18) FreeRTOS、ArduinoIDEでビルドできたんだ へ進む