e2 studioは遅いしWindowsのノートPCは画面が狭くて見通しがすこぶる悪いので、結局FreeBSDでLinux用のツールチェインを使って開発する事にしました。
FreeBSDにはLinuxのELFバイナリを実行する機能があり、蟹さんのツールチェインなどを動かしています。
実はportsを作ってネイディブのbinutilとgcc492をビルドしてみたのですが、ビルドはできるのですすが、正常に動くターゲットのバイナリが作れなかったので、あきらめました。
gccやbinutilのrxサポートは本家にも入っているのですがRenesas版には独自の修正が入っているようです。本家のgcc492にはmisaオプションはありません。
Renesas版のソースは提供されているので、頑張ればネイティブのコマンドが作れると思いますが、Linux互換機能で十分使えるので、ビルドはしません。
オープンソースのサイトにあるgcc4系の最後のパッケージのgcc-4.8.4.201902-SP1-GNURX-ELF.runを使いました。activation codeの事は前の記事に書きました。
gcc8ではなくgcc4にしたのはmruby on YABMがすべてgcc4だからです。
ちょうどRXのmruby/cの記事が公開されていたので参考にしました。
同じコードを下記のレポジトリに突っ込んでビルドできるようにしてみました。
e2 studioで新プロジェクトで生成されたファイルにネットで見つけたコードを入れてmruby/cのコードとがっちゃんこしました。
makeするとmain.motが出来上がるので、このファイルをWindowsにコピーしてRenesas Flash Programmerで焼くと出来上がりです。
100円(税込)で動くmruby/cは最安値ではないでしょうか。
RX210へのmruby/cのポートはitocさんにpdf資料があるのですが、5年くらい前のもので、古くなっていますが、大変参考になりました。
timerサポートをやってきがついたのだがmruby/cはメモリの少ないターゲットではstackの設定が引っかかる事があるようです。RX210のtimerサポートではスタック調整のためldスクリプトをいじりました。
間違ったバイナリを焼かないために、main.motを作る時にCRCを表示するようにしました。
rx-elf-size main.elf
text data bss dec hex filename
106252 3272 12392 121916 1dc3c main.elf
rx-elf-objcopy main.elf -O srec -I elf32-rx-be-ns main.mot
CRC-32 : 29ACDD1A
Renesas Flash Programmerで焼く時に確認できます。
Renesas Flash Programmerにはcliのコマンドもあるようです。
R5F52108ADFPの場合、焼先はFlashではなくてROMです。
スイッチ付のUSB HUBやケーブルを使うと設定を変えたときにコネクタの抜き差しをしなくてすむので便利です。
実装不良品でリセットボタンが付いてなかったのでこうしました。普通の製品ではリセットボタンでよいです。
R5F52108ADFPのROMの書き込み回数は1000回のようです。古い製品なのでちょっと少ないですが、トライ&エラーをしている分にはそれほどにはならないと思います。ちなみに後継の製品で使われているR5F5210BBDFPは10000回のようです。
R5F52108ADFPにもデータ用のflashがあり、そこは8Kで100,000回の書き込みが出来るようです。Rubyスクリプトをいろいろ試したのであればmrbをそこに置くのも手かもしれません。データ用のflashは2バイト単位でのアクセスなので一旦ヒープにコピーして使うことにしました。