GR-PEACHでmrubyを動かす


本記事では，mruby on GR-PEACH+TECSについて紹介します．

# はじめに
mruby on GR-PEACH+TECSとは，mruby (軽量Ruby)を使って，ルネサス社製マイコンGR-PEACHを動かすためのプラットフォームです．
[TECS (TOPPERS Embedded Component System)](https://www.toppers.jp/tecs.html) と呼ばれるコンポーネントシステムによって，コンポーネントベースで開発されており，**mrubyプログラムからRTOS（TOPPERS/ASP3）の機能を呼び出すことができる**ように設計されています．

ETロボコンで利用されているプラットフォーム「[mruby on ev3rt+tecs](https://www.toppers.jp/tecs.html#mruby_ev3rt)」と同じ仕組み・構造で設計されているので，利用したことがある方はぜひ試してみてください．

# 準備

まず，[mruby_on_GR-PEACH-TECS_package-alpha1.0.0.tar.gz](https://www.toppers.jp/tecs.html#mruby_grpeach_tecs)をダウンロードしましょう．
Windows環境での紹介になります．
以下のものをインストールしてください．

* Cygwin
    * Ruby
    * GNU Make
    * bison

* GNUARM-NONE v16.01 Windows Toolchain (ELF)
    * クロスコンパイラ
    * PATHを通しておいてください．(arm-none-eabi-gcc等が実行できる状態)

* Tera Term
    * シリアルで文字を出力する場合に使用します．

**使用するハードウェア**

* [GR-PEACH](http://gadget.renesas.com/ja/product/peach.html)
    * Normal版とFull版があります．
    * EthernetのLANコネクタやArduino UNO互換ピンが実装されているFull版がおすすめです．

**GR-PEACH Full版**
![IMG_5728.JPG](https://qiita-image-store.s3.amazonaws.com/0/99815/d1d2e21f-3e53-09f6-ff64-046badb3cba8.jpeg)


# ビルド

## mrubyのビルド
まず，mrubyのビルドを行います．

```shell-session
$ cd ~/mruby_on_GR-PEACH-TECS/mruby-1.3.0
$ make
```

## バイナリの作成
mrubyのビルドが完了したら，プラットフォーム部分のビルドを行います．

```shell-session
$ cd ~/mruby_on_GR-PEACH-TECS/asp3/workspace/build  ( ../asp3/workspace/build でも可)
$ make
```
![image](https://qiita-image-store.s3.amazonaws.com/0/99815/6d7ff3c2-4570-44f9-f5c1-a806f9ebf734.png)

このような画面が表示されて，**asp.bin**というバイナリファイルが生成されたらビルド成功です．

## バイナリのコピー・GR-PEACHの起動
出来上がったバイナリをGR-PEACHにコピーします．

PCとGR-PEACHをUSBケーブルで接続すると， MBED というドライブが立ち上がります．
エクスプローラーを開いてドラッグ&ドロップしてコピーしてください．

|![image](https://qiita-image-store.s3.amazonaws.com/0/99815/c184ecbf-d81b-c7e9-7926-8e40ef8f375f.jpeg)|![image](https://qiita-image-store.s3.amazonaws.com/0/99815/ea50eaa2-4b64-c351-7896-f44f366ff09a.png)|
|---|---|---|


~~また，Cygwin上のコマンドでコピーする場合は，以下のコマンドを叩いてください．~~
**[注意]Cygwinの cp コマンドで上手くいかないことがあります．**
```shell-session
$ cp asp.bin /cygdrive/d/               (自環境でのMBEDドライブ名を指定してください)
```

コピーが完了したら，GR-PEACHを起動します．

GR-PEACHの電源ボタンを押すと，プログラムが実行されます．
(緑色に点灯しているLEDの上の白いボタン)
![IMG_5730.jpg](https://qiita-image-store.s3.amazonaws.com/0/99815/bff5e8e2-75f2-f276-8f52-b8f5b2f4b891.jpeg)

デフォルトのアプリケーションは，**led_sample.rb** が指定されています．

# アプリケーションの開発方法

## アプリケーションファイルの指定

asp3/workspace/build の VM1.cdl にてアプリケーションを指定しています．
アプリケーションを変更する場合は，$(MRUBY_APP_DIR)/led_sample.rb の行を，任意のアプリケーション名に修正し,　make を実行してください．

例えば，```$(MRUBY_APP_DIR)/rtos_sample.rb``` とすると，**rtos_sample.rb** が実行されます．


```c:VM1.cdl
import(<bridge.cdl>);

cell nMruby::tMruby Mruby {
    mrubyFile =
        "$(MRUBY_LIB_DIR)/RTOS.rb "
        "$(MRUBY_LIB_DIR)/LED.rb "
        "$(MRUBY_APP_DIR)/rtos_sample.rb";    (修正後) 
    cInit = VM_TECSInitializer.eInitialize;
    cSerialPort = SerialPort1.eSerialPort;
};
```

サンプルアプリケーションは，asp3/workspace/mruby_app に入っています．
(alpha-1.0.0 では，led_sample.rb と rtos_sample.rb の２つです)

自分でアプリケーションを作成する場合は，mruby_app内に mysample.rb というようにファイルを作成し，
上記のように VM1.cdl を編集することでビルドできます．


## シリアル出力

* p
* puts
* print
というメソッドを使うと，シリアルで文字出力を行うことができます．
（デバッグ等に便利です！）
ここでは Tera Term を利用しています．

PCとGR-PEACHを接続した状態で，Tera Term を起動し，下のシリアルを選択して mbed (GR-PEACH)を指定します．
![image](https://qiita-image-store.s3.amazonaws.com/0/99815/2c5c0c98-9561-ed4c-9b9f-a7b844b95296.png)

次に，【設定】→【シリアルポート】と開き，以下のように設定を行ってください．
![image](https://qiita-image-store.s3.amazonaws.com/0/99815/cbe9c819-7d7e-c770-1a6f-2d9fe1c882d3.png)

Tera Term と接続確立した状態で，GR-PEACHを起動すると文字が出力されます．
(下の図はrtos_sample.rbを実行したものです)
![image](https://qiita-image-store.s3.amazonaws.com/0/99815/3ff6ada8-392a-a866-dded-2230239ac99d.png)

※改行がおかしい場合は，【設定】→【端末】を開き，
改行コードの受信を「AUTO」と設定してみてください．

# 最後に
GR-PEACHでmrubyを動かす方法は，この他にも，[momo-mruby](https://github.com/mimaki/momo-mruby-bin/)があります．
(軽量RubyフォーラムのHPからもダウンロードできるようです)
momo-mrubyは，導入が簡単にできて，対話モードでも動作できるようです．
( 参考: https://qiita.com/Hir0_IC/items/8c0d37792d983c9f060c )

mruby on GR-PEACH+TECS は，現在コマンドラインでの開発しかサポートされておらず，（WebコンパイラやIDEが流行っている中、、）コンパイラのインストールやPATHの設定など，慣れていない人にとっては，導入が少々面倒ですが，
* マルチVMに対応している
* TECSの機能により，mruby単体より高速に動作する
* 周期タスクやセマフォといったRTOSの機能を使える
といった特長があります．
ぜひ試してみてください！