Linux Foundationが主導して開発しているリアルタイムOS Zephyr RTOSで組み込みシステム開発向けの軽量なRuby実装mruby/cを動かしてみました。
その手順を説明します。
本回はターゲット上のUARTからHello worldを表示するRubyバイトコードを実行します。
この記事は次の記事を別のボードで動作させています。
- mruby/c on Zephyr RTOS その1 まずはHello world 【この記事へのリンク)】
上の記事ではNXPのFRDM-MCXN947で動作させました。
Hello worldはRTOSを使用しているためハードウェア依存もないので、基本的なことは上の記事と同じです。
ビルドのコマンド(west)のオプションの変更で動作しました。
そのため、ビルドの項までは上の記事を参照してください。
mruby/cとZephyrを動作させるボード
ターゲットボードはSTマイクロエレクトロニクスのNUCLEO-H563ZIを使用します。
ZephyrのNUCLEO-H563ZIの説明
https://docs.zephyrproject.org/latest/boards/st/nucleo_h563zi/doc/index.html

ツールのインストール
ターゲットボードへプログラムを書き込むためにSTM32CubeProgを使用します。
STM32CubeProgのLinux版をダウンロードしてインストールしてください。
STM32CubeProg
https://www.stmcu.jp/design/sw_dev/pc_soft/58442/
ビルドとターゲットボードへ書き込み
zephyr/samples/mrubyc_hello/でwestコマンドを実行することでビルドします。
-bオプションでボードを指定しています。
west build -b nucleo_h563zi -p
PCとボードのCN1 (USB STLINK)をUSBケーブルで接続した後、westコマンドを実行することでビルドしたプログラムをボードへ書き込みます。
west flash
実行
ボードのB2ボタン (RESET)を押すと、UART経由で次の文字が出力されました。
hello mruby/cがRubyからの出力です。

まとめ
Zepyr ROTS上でmruby/cのバイトコードを実行する手順を説明しました。
FRDM-MCXN947で動作させたプログラムを別のボードNUCLEO-H563ZIで動作させました。
Hello worldという簡単なプログラムしか動作させていませんが、mruby/cならびにZephyrの移植し易さを実感しました。
参考にしたドキュメント
mruby/c
【チュートリアル】mruby/cをSTM32マイコンで動かす Chapter02: mruby/cでElChika(えるちか)
https://qiita.com/HirohitoHigashi/items/10f9088f32742edf7cd6
github mruby/c
https://github.com/mrubyc/mrubyc
Zephyr
Getting Started Guide
https://docs.zephyrproject.org/latest/develop/getting_started/index.html
ZephyrのドキュメントのNUCLEO-H563ZIの項
https://docs.zephyrproject.org/latest/boards/st/nucleo_h563zi/doc/index.html
Zephyr Project
https://www.zephyrproject.org/


