狠狠撸

狠狠撸Share a Scribd company logo
mrubyデバッガの紹介
九州工業大学
田中 和明
軽量Rubyフォーラム
2015年1月30日
mrubyの紹介
● mruby – 軽量Ruby
– Rubyと同じ文法
– 実行に必要な資源が少ない
– Cによる機能拡張が容易
mrubyコンパイラ
mrubyVM
● Rubyプログラムを mrubyコンパイラ でコンパイル
mrubyバイトコード を作成する
● mrubyバイトコード を,ターゲットデバイスに入れる
● mrubyバイトコード を,mrubyVMで実行する
開発環境での開発に必要
mrubyプログラム(デバイス非依存)
ターゲットデバイスでの実行に必要
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バイトコード
コンパイル
* 実際にはバイナリ
* デバイスアーキテクチャに依存しない
 (エンディアン,アラインメント)
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バイトコードを実行
mrubyを使った
組込みソフト開発(1)
●
(準備)
最初に「mrubyXXX」を準備する
– 開発用に,mrubyをビルドする
– 「mrubyコンパイラ」「mrubyVM」
– ターゲットデバイス用に,mrubyをビルドする
(クロスコンパイラを使う)
(必要なライブラリなども作成しておく)
– 「mrubyVM」
開発環境での開発に必要
mrubyプログラム(デバイス非依存)
ターゲットデバイスでの実行に必要
mrubyを使った
組込みソフト開発(2)
●
(開発)
– Rubyでプログラムを作成する
– mrubyコンパイラで バイトコード を生成する
– ターゲットデバイスに バイトコード を入れる
(例えば,SDカード)
– mrubyVMで実行する
開発環境での開発に必要
mrubyプログラム(デバイス非依存)
ターゲットデバイスでの実行に必要
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 より抜粋)
mrubyデバッガ
● mruby 1.1.0
– GitHub
– 軽量Rubyフォーラムから入手できます
https://github.com/mruby/mruby
http://forum.mruby.org/
mrubyデバッガ
● mrubyVM内のバイトコードをデバッグする
– 実行
– ブレークポイント
– 式評価(変数の参照)
– コマンドライン
DEMO
●
実行
●
ブレークポイント
●
式の評価
デバッガ仕様
● すべてのデバッガの機能はAPIとして利用できる
– 機能拡張
– 開発環境(IDEなど)からの呼び出し
– リモートデバッグ
Ruby東京プレゼン 資料
mrbgemを使った開発
● Cによるmrubyの拡張の手法
● mrubyソースコードを書き換える
(あまりオススメできない)
● mrbgemsを利用する
– gitを使う
ライブラリ
● Git または Githubを使う
– ライブラリをソースコードから独立させて,
ビルド時に組み込む
– 「build_config.rb」ファイルに1行追加するだけ
conf.gem :github => 'kaz0505/mruby-gpio-raspi'
ラズベリーPi 用のGPIOクラスライブラリ
conf.gem :github => 'kaz0505/mruby-gpio-emuration'
PC用のGPIOエミュレーションクラスライブラリ
ライブラリを利用した例
● GPIOの例
– ラズベリーPi, PCエミュレーション 共通
Gpio.pinMode 1, Gpio::OUTPUT
Gpio.pinMode 2, Gpio::INPUT
Gpio.digitalWrite 1, Gpio::HIGH
Gpio.digitalWrite 2, Gpio::LOW

More Related Content

Ruby東京プレゼン 資料