2016年3月29日
(共同研究者)
国立大学法人 九州工業大学
情報工学研究院 機械情報工学系
准教授 田中和明
しまねソフト研究開発センター
(公益財団法人しまね産業振興財団)
専門研究員 東 裕人
© Kazuaki Tanaka & Shimane IT Open-innovation Center
プログラム言語「mruby」
先駆的研究テーマ「mruby/c」
〜mruby/c の機能紹介〜
© Kazuaki Tanaka & Shimane IT Open-innovation Center
内 容
1 mruby の紹介
2 mruby の最近の話題
3 mruby/c の紹介
4 mruby/c ボードの開発状況
5 mruby/c のデモ
© Kazuaki Tanaka & Shimane IT Open-innovation Center
1 mrubyの紹介
・Rubyを小型化し、組込み用途で利用する
・(例)
− 組込みデバイス
− 他のアプリケーションの内部で動く
− コマンドラインアプリケーション
(ネイティブアプリケーション)
© Kazuaki Tanaka & Shimane IT Open-innovation Center
Rubyとの違い
・mrubyのプログラム実行
(1)ソースコードをコンパイルして
バイトコードを得る
(2)バイトコードをVMが逐次実行する
・バイトコードを実行するVMがあれば、
どの環境でもmrubyプログラムを動かせる
© Kazuaki Tanaka & Shimane IT Open-innovation Center
バイトコードの特徴
・バイナリ形式
・アーキテクチャに依存しない
・言語の解析が不要(アセンブラに近い)
・実行時の高速化、省メモリ
(ここからは未実装)
・局所的な最適化が期待できる
・暗号化、電子署名
© Kazuaki Tanaka & Shimane IT Open-innovation Center
組込みソフトの難しさ
・製品ごとに、使われているマイコンの
CPU、メモリ、OSなどが異なる
・マイコンごとに、専用の
開発環境が必要
・周辺回路(I/O)も異なる
・組込みソフトの開発だけでなく、
保守作業も困難
© Kazuaki Tanaka & Shimane IT Open-innovation Center
難しさの例(よくある話し)
・製品に使用していたCPUが製造終了
・新しいCPUを使った製品を開発する
・ソフトを作り直す
↑
CPUが異なれば、ソフトも大きな変更が必要
・CPUのビット幅が異なる
・アーキテクチャが異なる
・これまで使っていたOSが対応していない
・タイミングが合わない(古い製品にありがち)
© Kazuaki Tanaka & Shimane IT Open-innovation Center
解決方法
・ハードウェアに近い部分を抽象化する
− HAL(Hardware Abstract Layer)
・VMで抽象化する
− Java
・抽象度の高い言語を使う
− スクリプト言語(RubyやJavaScriptなど)
mruby
© Kazuaki Tanaka & Shimane IT Open-innovation Center
mrubyの場合
© Kazuaki Tanaka & Shimane IT Open-innovation Center
VMでバイトコードを実行する
© Kazuaki Tanaka & Shimane IT Open-innovation Center
VMで動作検証できる
・PCの上で動くVMを作っておくと
組込みソフトのテストができる
− テスト用の入出力を用意しておき、
プログラムを実行する
© Kazuaki Tanaka & Shimane IT Open-innovation Center
mrubyのバージョン
・公開(Ver.1.0)
− この時点で、多くのライブラリが提供されている
・デバッガが提供されている(Ver.1.1)
− デバッガツール(コマンドライン)
− デバッガ用API
・mrbgemの充実(Ver.1.2)
− クロスコンパイル
− mrbgemsの整理
© Kazuaki Tanaka & Shimane IT Open-innovation Center
mrubyの機能拡張
〜mrbgems〜
・機能拡張部分(多くはクラスの実装)を
1つのディレクトリ内にまとめる
・ビルド設定ファイルに記述することで
VMビルド時に機能が取り込まれる
・不要な機能はビルド設定ファイルから
取り除くこともできる
© Kazuaki Tanaka & Shimane IT Open-innovation Center
2 mruby の最近の話題
・「組込みシステムの高効率開発を可能とする
開発フレームワークの研究開発」
(九州工業大学、SCSK九州、有明高専)
− NEDOの助成事業
「IoT社会の実現に向けた電子・情報分野事業の周
辺技術・関連課題における小規模研究開発」
− mrubyを使ったIoT製品開発を効率化する
− 統合開発環境を設計開発する
− enziボード(*1)とシームレスに繋がる開発環境
(*1)enziボード:mruby専用のマイコンボード、ARM Coretex M4
© Kazuaki Tanaka & Shimane IT Open-innovation Center
こんなイメージ
・Arudinoみたいな感覚で使えるmrubyボード
・Arudinoとの違い
− mrubyである
− enzi以外のmrubyボードも用意する
(バイトコード互換)
− 必要なセンサに対応したVMにカスタマイズできる
(Railsの感覚)
© Kazuaki Tanaka & Shimane IT Open-innovation Center
3 mruby/c の紹介
・mrubyの多機能に対する逆張り
・mrubyでできない事を実現しよう!
− 少ないメモリ(〜ワンチップ)
− コンカレント動作(〜OSはいらない)
− 起動を速くする(〜割り込みを目指す)
− 組込み技術者向けの仕様
(〜見て分かる規模にする)
mruby/c の特徴
①高い開発生産性:C言語に比べて、5倍程度と予測
✪Rubyが持つ高い生産性を引き継ぐ
✪コンカレントな動作(異なる動作は、別のプログラムで実現)
⇒ ・スピーディーな試作開発、実用化開発を実現
・容易に変更が可能
②省電力:従来のmruby比で10分の1程度、メモリ消費50kb未満で稼働
✪本来の機能以外の動作を省き実装を最適化
✪マルチコアプロセッサを積極的にサポート
⇒ ・限られた電力供給環境下でも稼働
(電池駆動、エナジーハーベスティング)
© Kazuaki Tanaka & Shimane IT Open-innovation Center
© Kazuaki Tanaka & Shimane IT Open-innovation Center
mruby/cの基本コンセプト
・mruby/cの優先順位 mrubyは、
1.メモリ 3.機能
2.起動速度 4.実行速度
3.機能(ライブラリ) 1.メモリ
4.実行速度 2.起動速度
・想定するアプリケーション領域
・省電力デバイス
・手軽に試作する
© Kazuaki Tanaka & Shimane IT Open-innovation Center
mruby と mruby/c の概要
mruby mruby/c
ターゲット サーバー
組込みOS
OSは、ほぼ必要
小型デバイス
OSなし
メモリ 〜400KB 〜40KB
機能拡張 mrbgems ソース書き換え
VMの機能拡張 通常はできない 可能
ライセンス MIT BSD
目指すところ 多くの環境で動作
CRubyとの互換性
小型
省電力
© Kazuaki Tanaka & Shimane IT Open-innovation Center
mruby/c ターゲットCPU
PSoC5(32bit) Cypress
RX63N(32bit) ルネサス
PIC24(16bit) Microchip Technology
mruby/c β版の公開
© Kazuaki Tanaka & Shimane IT Open-innovation Center
現在、GitHubで公開しています
https://github.com/mrubyc/mrubyc
© Kazuaki Tanaka & Shimane IT Open-innovation Center
「mruby/c」 の評価
© Kazuaki Tanaka & Shimane IT Open-innovation Center
mruby/c への機能追加
・(状況)
− Cで作成した関数を持っている
− Rubyから呼び出したい
・(方法)
− RubyのメソッドとCの関数の対応を記述する
− RubyとCの間の値の受け渡し
(wapper関数を作る)
© Kazuaki Tanaka & Shimane IT Open-innovation Center
機能追加の例
・(状況)
− ベンダーからLED出力の関数が提供されている
・(方法)
− wapper関数を作成する
− wapper関数を作成する
void LED_Writer(uint8 value);
void c_led(mrb_vm *vm, mrb_volue *v)
{
LED_Write( GET_INT_ARG(θ) );
}
mrb_define_method(static_class_object, “led”, c_led);
© Kazuaki Tanaka & Shimane IT Open-innovation Center
サンプルプログラム
delay の関数も同様に作成します
© Kazuaki Tanaka & Shimane IT Open-innovation Center
◯mrubyの研究を取り込む
・学生がMQTTをmrubyに実装しました
− mrubyのビルド設定に1行追加するだけで、
MQTT対応のVMを作成できます
− 「build_config.rb」の中に1行追加するだけ
conf.gem :github => ‘sabakan21/mruby-mqtt’
mruby/c への機能追加
© Kazuaki Tanaka & Shimane IT Open-innovation Center
実験
© Kazuaki Tanaka & Shimane IT Open-innovation Center
「mruby-mqtt」の評価(1)
© Kazuaki Tanaka & Shimane IT Open-innovation Center
「mruby-mqtt」の評価(2)
© Kazuaki Tanaka & Shimane IT Open-innovation Center
4 mruby/c ボードの開発状況
(1)mruby/cが動く状態のマイコン
− マイコンのフラッシュ内にmruby/cのVMを
書き込み済みで配布する
※PSoC5を搭載
(2)IDE
− ケーブルで接続するだけで
mruby/cのマイコン開発を可能にする
(3)ローカル/クラウドコンパイラ
5 mruby/c のデモ
Zigbee インターネット
センサーボード
mruby/c
マイクロサーバー
CRuby ブラウザ
© Kazuaki Tanaka & Shimane IT Open-innovation Center

mruby/c機能紹介20160329

  • 1.
    2016年3月29日 (共同研究者) 国立大学法人 九州工業大学 情報工学研究院 機械情報工学系 准教授田中和明 しまねソフト研究開発センター (公益財団法人しまね産業振興財団) 専門研究員 東 裕人 © Kazuaki Tanaka & Shimane IT Open-innovation Center プログラム言語「mruby」 先駆的研究テーマ「mruby/c」 〜mruby/c の機能紹介〜
  • 2.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 内 容 1 mruby の紹介 2 mruby の最近の話題 3 mruby/c の紹介 4 mruby/c ボードの開発状況 5 mruby/c のデモ
  • 3.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 1 mrubyの紹介 ・Rubyを小型化し、組込み用途で利用する ・(例) − 組込みデバイス − 他のアプリケーションの内部で動く − コマンドラインアプリケーション (ネイティブアプリケーション)
  • 4.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center Rubyとの違い ・mrubyのプログラム実行 (1)ソースコードをコンパイルして バイトコードを得る (2)バイトコードをVMが逐次実行する ・バイトコードを実行するVMがあれば、 どの環境でもmrubyプログラムを動かせる
  • 5.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center バイトコードの特徴 ・バイナリ形式 ・アーキテクチャに依存しない ・言語の解析が不要(アセンブラに近い) ・実行時の高速化、省メモリ (ここからは未実装) ・局所的な最適化が期待できる ・暗号化、電子署名
  • 6.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 組込みソフトの難しさ ・製品ごとに、使われているマイコンの CPU、メモリ、OSなどが異なる ・マイコンごとに、専用の 開発環境が必要 ・周辺回路(I/O)も異なる ・組込みソフトの開発だけでなく、 保守作業も困難
  • 7.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 難しさの例(よくある話し) ・製品に使用していたCPUが製造終了 ・新しいCPUを使った製品を開発する ・ソフトを作り直す ↑ CPUが異なれば、ソフトも大きな変更が必要 ・CPUのビット幅が異なる ・アーキテクチャが異なる ・これまで使っていたOSが対応していない ・タイミングが合わない(古い製品にありがち)
  • 8.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 解決方法 ・ハードウェアに近い部分を抽象化する − HAL(Hardware Abstract Layer) ・VMで抽象化する − Java ・抽象度の高い言語を使う − スクリプト言語(RubyやJavaScriptなど) mruby
  • 9.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center mrubyの場合
  • 10.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center VMでバイトコードを実行する
  • 11.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center VMで動作検証できる ・PCの上で動くVMを作っておくと 組込みソフトのテストができる − テスト用の入出力を用意しておき、 プログラムを実行する
  • 12.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center mrubyのバージョン ・公開(Ver.1.0) − この時点で、多くのライブラリが提供されている ・デバッガが提供されている(Ver.1.1) − デバッガツール(コマンドライン) − デバッガ用API ・mrbgemの充実(Ver.1.2) − クロスコンパイル − mrbgemsの整理
  • 13.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center mrubyの機能拡張 〜mrbgems〜 ・機能拡張部分(多くはクラスの実装)を 1つのディレクトリ内にまとめる ・ビルド設定ファイルに記述することで VMビルド時に機能が取り込まれる ・不要な機能はビルド設定ファイルから 取り除くこともできる
  • 14.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 2 mruby の最近の話題 ・「組込みシステムの高効率開発を可能とする 開発フレームワークの研究開発」 (九州工業大学、SCSK九州、有明高専) − NEDOの助成事業 「IoT社会の実現に向けた電子・情報分野事業の周 辺技術・関連課題における小規模研究開発」 − mrubyを使ったIoT製品開発を効率化する − 統合開発環境を設計開発する − enziボード(*1)とシームレスに繋がる開発環境 (*1)enziボード:mruby専用のマイコンボード、ARM Coretex M4
  • 15.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center こんなイメージ ・Arudinoみたいな感覚で使えるmrubyボード ・Arudinoとの違い − mrubyである − enzi以外のmrubyボードも用意する (バイトコード互換) − 必要なセンサに対応したVMにカスタマイズできる (Railsの感覚)
  • 16.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 3 mruby/c の紹介 ・mrubyの多機能に対する逆張り ・mrubyでできない事を実現しよう! − 少ないメモリ(〜ワンチップ) − コンカレント動作(〜OSはいらない) − 起動を速くする(〜割り込みを目指す) − 組込み技術者向けの仕様 (〜見て分かる規模にする)
  • 17.
  • 18.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center mruby/cの基本コンセプト ・mruby/cの優先順位 mrubyは、 1.メモリ 3.機能 2.起動速度 4.実行速度 3.機能(ライブラリ) 1.メモリ 4.実行速度 2.起動速度 ・想定するアプリケーション領域 ・省電力デバイス ・手軽に試作する
  • 19.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center mruby と mruby/c の概要 mruby mruby/c ターゲット サーバー 組込みOS OSは、ほぼ必要 小型デバイス OSなし メモリ 〜400KB 〜40KB 機能拡張 mrbgems ソース書き換え VMの機能拡張 通常はできない 可能 ライセンス MIT BSD 目指すところ 多くの環境で動作 CRubyとの互換性 小型 省電力
  • 20.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center mruby/c ターゲットCPU PSoC5(32bit) Cypress RX63N(32bit) ルネサス PIC24(16bit) Microchip Technology
  • 21.
    mruby/c β版の公開 © KazuakiTanaka & Shimane IT Open-innovation Center 現在、GitHubで公開しています https://github.com/mrubyc/mrubyc
  • 22.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 「mruby/c」 の評価
  • 23.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center mruby/c への機能追加 ・(状況) − Cで作成した関数を持っている − Rubyから呼び出したい ・(方法) − RubyのメソッドとCの関数の対応を記述する − RubyとCの間の値の受け渡し (wapper関数を作る)
  • 24.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 機能追加の例 ・(状況) − ベンダーからLED出力の関数が提供されている ・(方法) − wapper関数を作成する − wapper関数を作成する void LED_Writer(uint8 value); void c_led(mrb_vm *vm, mrb_volue *v) { LED_Write( GET_INT_ARG(θ) ); } mrb_define_method(static_class_object, “led”, c_led);
  • 25.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center サンプルプログラム delay の関数も同様に作成します
  • 26.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center ◯mrubyの研究を取り込む ・学生がMQTTをmrubyに実装しました − mrubyのビルド設定に1行追加するだけで、 MQTT対応のVMを作成できます − 「build_config.rb」の中に1行追加するだけ conf.gem :github => ‘sabakan21/mruby-mqtt’ mruby/c への機能追加
  • 27.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 実験
  • 28.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 「mruby-mqtt」の評価(1)
  • 29.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 「mruby-mqtt」の評価(2)
  • 30.
    © Kazuaki Tanaka& Shimane IT Open-innovation Center 4 mruby/c ボードの開発状況 (1)mruby/cが動く状態のマイコン − マイコンのフラッシュ内にmruby/cのVMを 書き込み済みで配布する ※PSoC5を搭載 (2)IDE − ケーブルで接続するだけで mruby/cのマイコン開発を可能にする (3)ローカル/クラウドコンパイラ
  • 31.
    5 mruby/c のデモ Zigbeeインターネット センサーボード mruby/c マイクロサーバー CRuby ブラウザ © Kazuaki Tanaka & Shimane IT Open-innovation Center