Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ruby東京プレゼン 資料

1,666 views

Published on

mrubyの概要とデバッガ紹介

Published in: Software
  • Be the first to comment

Ruby東京プレゼン 資料

  1. 1. mrubyデバッガの紹介 九州工業大学 田中 和明 軽量Rubyフォーラム 2015年1月30日
  2. 2. mrubyの紹介 ● mruby – 軽量Ruby – Rubyと同じ文法 – 実行に必要な資源が少ない – Cによる機能拡張が容易
  3. 3. mrubyコンパイラ mrubyVM ● Rubyプログラムを mrubyコンパイラ でコンパイル mrubyバイトコード を作成する ● mrubyバイトコード を,ターゲットデバイスに入れる ● mrubyバイトコード を,mrubyVMで実行する 開発環境での開発に必要 mrubyプログラム(デバイス非依存) ターゲットデバイスでの実行に必要
  4. 4. mrubyプログラムの 作成と動作(1) def sum(n) s = 0 while n>0 do s += n n -= 1 end s end puts sum(10) mrbc 2 000 OP_ENTER 1:0:0:0:0:0:0 3 001 OP_LOADI R3 0 ; R3:s 4 002 OP_JMP 010 5 003 OP_MOVE R4 R3 ; R3:s 5 004 OP_MOVE R5 R1 ; R1:n 5 005 OP_ADD R4 :+ 1 5 006 OP_MOVE R3 R4 ; R3:s 6 007 OP_MOVE R4 R1 ; R1:n 6 008 OP_SUBI R4 :- 1 6 009 OP_MOVE R1 R4 ; R1:n 4 010 OP_MOVE R4 R1 ; R1:n 4 011 OP_LOADI R5 0 4 012 OP_GT R4 :> 1 4 013 OP_JMPIF R4 003 8 014 OP_RETURNR3 return ; R3:sRubyプログラム mrunyバイトコード コンパイル * 実際にはバイナリ * デバイスアーキテクチャに依存しない  (エンディアン,アラインメント)
  5. 5. mrubyプログラムの 作成と動作(2) 2 000 OP_ENTER 1:0:0:0:0:0:0 3 001 OP_LOADI R3 0 ; R3:s 4 002 OP_JMP 010 5 003 OP_MOVE R4 R3 ; R3:s 5 004 OP_MOVE R5 R1 ; R1:n 5 005 OP_ADD R4 :+ 1 5 006 OP_MOVE R3 R4 ; R3:s 6 007 OP_MOVE R4 R1 ; R1:n 6 008 OP_SUBI R4 :- 1 6 009 OP_MOVE R1 R4 ; R1:n 4 010 OP_MOVE R4 R1 ; R1:n 4 011 OP_LOADI R5 0 4 012 OP_GT R4 :> 1 4 013 OP_JMPIF R4 003 8 014 OP_RETURNR3 return ; R3:s mrunyバイトコード mrubyVM ロード ライブラリ ドライバ mrubyバイトコードを実行
  6. 6. mrubyを使った 組込みソフト開発(1) ● (準備) 最初に「mrubyXXX」を準備する – 開発用に,mrubyをビルドする – 「mrubyコンパイラ」「mrubyVM」 – ターゲットデバイス用に,mrubyをビルドする (クロスコンパイラを使う) (必要なライブラリなども作成しておく) – 「mrubyVM」 開発環境での開発に必要 mrubyプログラム(デバイス非依存) ターゲットデバイスでの実行に必要
  7. 7. mrubyを使った 組込みソフト開発(2) ● (開発) – Rubyでプログラムを作成する – mrubyコンパイラで バイトコード を生成する – ターゲットデバイスに バイトコード を入れる (例えば,SDカード) – mrubyVMで実行する 開発環境での開発に必要 mrubyプログラム(デバイス非依存) ターゲットデバイスでの実行に必要
  8. 8. Tips ● mrubyVMでバイトコードを実行するには? – バイトコードのファイル名 – バイトコードが格納されているポインタ ● Cによる関数の拡張は? – Cの関数,Rubyのクラス/メソッドの マッピングの行を記述する mrb_define_method(mrb, fl, "+", flo_plus,MRB_ARGS_REQ(1)); Rubyのクラス名 (Floatクラスになっている) Rubyのメソッド名 Cの関数名 引数の数 「1.2 + 2.3」は, 「(1.2).+(1.3)」なので 引数は 1 つ (numeric.c より抜粋)
  9. 9. mrubyデバッガ ● mruby 1.1.0 – GitHub – 軽量Rubyフォーラムから入手できます https://github.com/mruby/mruby http://forum.mruby.org/
  10. 10. mrubyデバッガ ● mrubyVM内のバイトコードをデバッグする – 実行 – ブレークポイント – 式評価(変数の参照) – コマンドライン
  11. 11. DEMO ● 実行 ● ブレークポイント ● 式の評価
  12. 12. デバッガ仕様 ● すべてのデバッガの機能はAPIとして利用できる – 機能拡張 – 開発環境(IDEなど)からの呼び出し – リモートデバッグ
  13. 13. mrbgemを使った開発 ● Cによるmrubyの拡張の手法 ● mrubyソースコードを書き換える (あまりオススメできない) ● mrbgemsを利用する – gitを使う
  14. 14. ライブラリ ● Git または Githubを使う – ライブラリをソースコードから独立させて, ビルド時に組み込む – 「build_config.rb」ファイルに1行追加するだけ conf.gem :github => 'kaz0505/mruby-gpio-raspi' ラズベリーPi 用のGPIOクラスライブラリ conf.gem :github => 'kaz0505/mruby-gpio-emuration' PC用のGPIOエミュレーションクラスライブラリ
  15. 15. ライブラリを利用した例 ● GPIOの例 – ラズベリーPi, PCエミュレーション 共通 Gpio.pinMode 1, Gpio::OUTPUT Gpio.pinMode 2, Gpio::INPUT Gpio.digitalWrite 1, Gpio::HIGH Gpio.digitalWrite 2, Gpio::LOW

×