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