LoginSignup
2
0

More than 5 years have passed since last update.

GR-CITRUSファームウェアをカスタマイズしてオブジェクト指向ぽくmrubyでプログラミング

Last updated at Posted at 2016-12-13

概要

少し前にClass定義をバシバシするとバイナリサイズがでかくなって困るわーみたいなこと書いたのですが、takjnさんのカスタムmruby構築およびShimo_cchiさんのmrbgem構築をもとに、自分用カスタムファームを強化してみました。
mrbgemはlibmruby.aを作るときに組み込んでしまうので、ファームビルド後につかえるようになるarduino由来のメソッドは組み込めないのかと思ってましたが、なんのことはなく事前に組み込むことができたという話です。
コンパイル時に評価されないから関係ないということでしょうか?←理解はできていません。ただmrubyを構築するときにmrbgemがCに置き換えられてたり、なかなか見ていくと興味深い構造なんだと気づかされました。

やったこと

mrbgem組み込みついでに個人的に気になっていた点を直した。

  1. ローダのヘルプは ? を入力するまで表示させないプロンプト表示にした
  2. ローダのコマンドでよく使うものは小文字で受け入れるようにした(r x z l)
  3. takjnさんの組み込まれてたNeoPixel,SSD,GFXを最新ファームのブランチに移植
  4. Serial.println を Serial.puts にした
  5. Pinを汎用Classにし、InputDevice, OutputDeveceを定義

13番ピンにタクトスイッチを取り付け、もう片方をGNDにおとしただけの配線をしたうえ、下記プログラムを実行。

2016-12-13 (2).png

※上記の例で、バイナリサイズは363Byteにおさまっている。

2016-12-13 (3).png

まとめ

思いの外かんたんにmrbgemが組み込めたので、前に作ったLEDMatrixをgem化して組み込んでみるつもり。
しかしあまり多くgemだらけにするとlibmruby.aが肥大化して、ファイルコピーできなくて焦るので気をつけないといけない。
いまのところ579kbのファームウェアは75%までコピーされたところで止まる。けっこう肝を冷やすので500kbくらいを目安にしている(個人の感想です)

mrubyのCコードもわかりやすくできてるようで、Cを知らない自分もなんとかなりそうな気がした(するだけかもしれない)。
同じく気になっている .avalableとか.useWiFiとかもbooleanで帰ってくるように、改造したいような気もする。

カスタム版ファームウェアは秘密結社ギフハブに保存していますが、自己責任でお願いします。

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0