ARMマイコンに軽量Rubyを(その1)
CQ出版の雑誌インターフェース2012年6月号にARMマイコンの付録がついていたので、これにmrubyをポーティングできないかトライすることにしました。
付属FM3マイコン基板特設ページ|Interface
まずはコンパイラ等の開発環境を揃える必要があります。インターフェース6月号ではgccではなく*1、市販品のKEIL MDK-ARMとIARの評価版が紹介されています。私のPC環境(Windows XP)では、IARの30日限定版しか上手くインストールできなかったので、これを使うことにしました。
コンパイル環境を整え、エイッやぁ〜とmrubyのvm.cをコンパイルしてみました...みごとにコンパイル・エラーします。エラーの原因は、
です。前者はvm.c内にあるDIRECT_THREADEDシンボルの#defineをコメントアウトすればOKです*2。
304 //#define DIRECT_THREADED <-- ここをコメント・アウト 305 #ifndef DIRECT_THREADED 306 307 #define INIT_DISPACTH for (;;) { i = *pc; switch (GET_OPCODE(i)) { 308 #define CASE(op) case op: 309 #define NEXT mrb->arena_idx = ai; pc++; break 310 #define JUMP break 311 #define END_DISPACTH }}
後者は、正しくはターゲット・ボードに合わせたI/Oをインプリメントすべきですが、該当のコードはエラーメッセージの出力なので、今日のところはコメント・アウトすることにします。
さて、コンパイル結果のオブジェクト・ファイルのサイズですが、最適化を掛けなけれ仮想マシン・コアvm.oで約28KBでした。仮想マシン・コアだけでは文字列や正規表現の処理、クラス機能等は全く無く使いものにならないので、オブジェクトのサイズを睨みながら必要な機能を追加していくことになります。
はてさて、予想通りメモリ容量とのシビアな戦いになりそうです。
果たしてゴールに辿り着けるのでしょうか。
(つづく)