概要
少し前にClass定義をバシバシするとバイナリサイズがでかくなって困るわーみたいなこと書いたのですが、takjnさんのカスタムmruby構築およびShimo_cchiさんのmrbgem構築をもとに、自分用カスタムファームを強化してみました。
mrbgemはlibmruby.aを作るときに組み込んでしまうので、ファームビルド後につかえるようになるarduino由来のメソッドは組み込めないのかと思ってましたが、なんのことはなく事前に組み込むことができたという話です。
コンパイル時に評価されないから関係ないということでしょうか?←理解はできていません。ただmrubyを構築するときにmrbgemがCに置き換えられてたり、なかなか見ていくと興味深い構造なんだと気づかされました。
やったこと
mrbgem組み込みついでに個人的に気になっていた点を直した。
- ローダのヘルプは ? を入力するまで表示させないプロンプト表示にした
- ローダのコマンドでよく使うものは小文字で受け入れるようにした(r x z l)
- takjnさんの組み込まれてたNeoPixel,SSD,GFXを最新ファームのブランチに移植
- Serial.println を Serial.puts にした
- Pinを汎用Classにし、InputDevice, OutputDeveceを定義
例
13番ピンにタクトスイッチを取り付け、もう片方をGNDにおとしただけの配線をしたうえ、下記プログラムを実行。
※上記の例で、バイナリサイズは363Byteにおさまっている。
まとめ
思いの外かんたんにmrbgemが組み込めたので、前に作ったLEDMatrixをgem化して組み込んでみるつもり。
しかしあまり多くgemだらけにするとlibmruby.aが肥大化して、ファイルコピーできなくて焦るので気をつけないといけない。
いまのところ579kbのファームウェアは75%までコピーされたところで止まる。けっこう肝を冷やすので500kbくらいを目安にしている(個人の感想です)
mrubyのCコードもわかりやすくできてるようで、Cを知らない自分もなんとかなりそうな気がした(するだけかもしれない)。
同じく気になっている .avalableとか.useWiFiとかもbooleanで帰ってくるように、改造したいような気もする。
※カスタム版ファームウェアは秘密結社ギフハブに保存していますが、自己責任でお願いします。