コンパイル後のmrbファイルを、シリアル通信を使ってターゲットに転送する。
クロスプラットフォームのために、Qt5 (https://www.qt.io/jp) を使用している。まずQt5をインストール (https://download.qt.io/official_releases/qt/) してから、下記コマンドにてコンパイルする。
qmake
make # or gmake, nmake
- Windows Qt5.12.12
- Mac Qt5.12.12
mkdir ¥PATH¥TO¥DEPLOY¥mrbwrite
copy mrbwrite.exe ¥PATH¥TO¥DEPLOY¥mrbwrite
cd ¥PATH¥TO¥DEPLOY¥mrbwrite
windeployqt mrbwrite.exe
cp ~/Qt/*/clang_64/lib/QtCore.framework/Versions/5/QtCore .
cp ~/Qt/*/clang_64/lib/QtSerialPort.framework/Versions/5/QtSerialPort .
install_name_tool -change "@rpath/QtCore.framework/Versions/5/QtCore" "@executable_path/QtCore" mrbwrite
install_name_tool -change "@rpath/QtSerialPort.framework/Versions/5/QtSerialPort" "@executable_path/QtSerialPort" mrbwrite
./mrbwrite --showline # show all lines
./mrbwrite -l cu.USBSERIAL -s 57600 PROG1.mrb PROG2.mrb ...
- POP3プロトコルを模倣している。
- テキストで1行コマンドを送信すると、それに対するレスポンスが返る。
- 改行コードは、CRLF。
レスポンスは、
+
で始まる場合は正常終了-
で始まる場合はエラー
となる。
mrbwrite: :TARGET
| |
| "version" |
+------------------------->|
| |
| "+OK mruby/c v1.00" |
|<-------------------------+
| |
| "BADCOMMAND" |
+------------------------->|
| |
| "-ERR Illegal command." |
|<-------------------------+
| |
- version
- バージョン表示
- clear
- 書き込み済みバイトコードの消去
- write (size)
- mrubyバイトコード書き込み
- execute
- mrubyプログラム実行
- reset
- ソフトウェアリセット
- help
- コマンド一覧表示(人間用)
- showprog
- 書き込み済みプログラムサイズ表示(人間用)
mrbwrite側からターゲットへ空行(CRLFのみ)を送信することで開始される。
ターゲットでは、通常は起動後に書き込み済みのプログラムを実行するため、この参照実装では、起動直後の数秒間にCRLFを受信するか、ボード上のSW1が押されるとコマンド受け付けモードに入る。
以下の例は、mrbファイルのサイズが250バイトの場合であり、トランザクション中に250という数値がでてくる。
mrbwrite: :TARGET
| |
| CRLF,CRLF,... | 返信があるまで、Syncコードとして何度かCRLFを送信する
+----------------------->|
| |
| "+OK mruby/c" |
|<-----------------------+
| |
| "clear" |
+----------------------->|
| |
| "+OK" |
|<-----------------------+
| |
| "write 250" |
+----------------------->|
| |
| "+OK Write bytecode" |
|<-----------------------+
| |
| (mrb file 250 bytes) |
+----------------------->|
| |
| "+DONE" |
|<-----------------------+
| |
| "execute" |
+----------------------->|
| |
| "+OK" |
|<-----------------------+
| |
version
コマンドを送信することによって、ターゲットのバージョンを得ることができる。
そのフォーマットは、1つのスペースキャラクタ区切りによる以下のフォーマットが期待される。
(例)
+OK mruby/c v3.3 RITE0300 MRBW1.2
カラム
- +OK POP3互換ステータス文字列
- mruby/c 歴史的経緯
- v3.3 mruby/c VM のバージョン
- RITE0300 実行できるバイトコードRITEバージョン
- MRBW1.2 この通信プロトコルバージョン