athrill シリアル端末

#概要
昨日，athrill ヘビーユーザのお方から， 以下の改善要望がありました．

```
athrillからシリアル入力したいけど，マイコンでシリアル入力するような
やりかたでやりたい．たとえば，teraterm みたいに．
```

最近，このお方は，toppers の RTOS の勉強をマイコン使って実践されておられたのですが，
「マイコンなら teraterm 上でサクサクと RTOS のサンプルを動かしていたのに，
　athrill だとシリアル入力がやりづらい！」
とコメントを頂きました．

いちよ，athrill でシリアル入力するための機能があるので，そのやり方を説明したのですが，
毎回，デバッグモードに変更して，シリアル入力コマンド "S 0 <入力したい文字列>" を叩か
ないといけなくて，非常に使いづらいと・・．

実際に使われれる方のご意見はごもっとなので，さっそく，athrill 用のシリアル端末を作ることにしました．

#athrill シリアル端末
[athrill 開発プロジェクト](https://github.com/tmori/athrill)に，以下の２つのコマンドを追加しました．現状は，linux上(WSLもOK)のみ対応しています．

```
athrill-run-remote
athrill_terminal
```

athrill_terminal が teraterm っぽくシリアル入力するためのコマンドです．
athrill-run-remote の方は，athrill を athrill_terminal と通信できるようにするためのコマンドです．

#デモ
論より証拠，さっそく使ってみましょう．

まず，以下の手順で，asp3 のサンプルプログラムを athrill-run-remote で起動します．

## asp3 のサンプルプログラム配置フォルダへ移動

```
$ cd <athrillプロジェクト配置フォルダ>/ahrill/sample/os/asp3/OBJ
```

## asp3 のサンプルプログラムを起動
移動したフォルダ上で以下のコマンドを叩くだけです．

```
$ athrill-run-remote
```

起動成功すると，以下のようにログ出力されます．

```
OK: found device_config.txt
OK: found memory.txt
OK: found asp
core id num=1
ROM : START=0x0 SIZE=512
RAM : START=0x5ff7000 SIZE=512
Elf loading was succeeded:0x0 - 0x77c1 : 29.961 KB
Elf loading was succeeded:0x77c4 - 0x100bc : 0.0 KB
ELF SYMBOL SECTION LOADED:index=16
ELF SYMBOL SECTION LOADED:sym_num=550
ELF STRING TABLE SECTION LOADED:index=17
REMOTE:server port 49152
REMOTE:client port 49153
[DBG>[NEXT> pc=0x0 kernel_cfg_asm.S 23
```

## athrill シリアル端末を起動
athrill シリアル端末を実行するために，もう一個端末を起動し，任意のフォルダ上で
athrill_terminal コマンドを実行します．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/c1b28eea-7e5f-657c-1d92-3e7de9a79164.png)

athrill シリアル端末起動と同時に，asp3 のサンプルプログラムが動き出します．
asp3 のサンプルプログラムは，起動と同時に task1 が動き始めますので以下のように
メッセージが出力されます．

```
[CPU>
TOPPERS/ASP3 Kernel Release 3.2.0 for V850-ESFK3 (Jul  6 2019, 02:53:24)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2017 by Embedded and Real-Time Systems Laboratory
            Graduate School of Information Science, Nagoya Univ., JAPAN

System logging task is started.
Sample program starts (exinf = 0).
E_OBJ (-1) reported by `serial_opn_por'.
task1 is running (001).   |
task1 is running (002).   |
task1 is running (003).   |
```

## athrill シリアル端末から入力する
では，さっそく，athrill シリアル端末から，asp3 のサンプルプログラムに対して，
コマンドを発行してみましょう．

とりあえず，今動いているタスクを停止させるために，"1t"と入力すると，
下図のようにサンプルプログラムの動きがかわっていることがわかります．
※task2 が動き出します．

|athrillシリアル端末|asp3サンプル実行端末|
|---|---|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/c2faee7e-7624-0ddb-afa7-b6df867080eb.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/028ab733-374e-a638-9b58-642c4793f91e.png)|

※"1" は task1 に対するコマンド指示で，
※"t" はそのタスクに対して停止(terminate)させるという意味です

さらに，athrill シリアル端末からすべてのタスクを停止させて，
task2だけを起動してみます．

|athrillシリアル端末|asp3サンプル実行端末|
|---|---|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/89a77d58-0e9d-30c6-e639-07a18adba1b9.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/3ba3f159-8a58-5e75-b886-dc278bb29f79.png)|

とりあえず，こんな感じで，athrillシリアル端末からサクサクっとasp3サンプルプログラムに対して，
シリアル入力できたんじゃないかと思います．

なお，作業を終わりたい場合は，"Ctrl + C" でコマンドを終了させてください．

#まとめ
athrill の機能は色々と充実しているはずなのに，なかなか広まらないのは，
やっぱりこういう使い勝手がわるいからなんだろうなぁ・・と反省しました．

開発者の視点からは，あまり気にしてなかったのですが，マイコンシミュレータ
を利用する目的は，実機よりも手軽にサクサクっと使えることのはずなのに，
逆に使いづらいようでは本末転倒ですよね．

今後も何かあればドンドン改善していきますので，ご指摘いただけると嬉しいです．