M5StickV で TOPPERS BASE PLATFORM を動かしてみる

[TOPPERS Advent Calendar 2020](https://qiita.com/advent-calendar/2020/toppers) 2 日目の記事です。

# はじめに

[M5StickV で TOPPERS を動かしてみる](https://qiita.com/fukuebiz/items/7d2ef22b05a6e356cf39) で、M5StickV上でTOPPERSが動作することができたので、次は [TOPPERS BASE PLATFORM](https://www.toppers.jp/edu-baseplatform.html) を動かしてみます。TOPPERS BASE PLATFORM にはデバイスドライバーが含まれていて、M5StickV のいくつかのデバイスもサポートされています。

# 準備

### ツールチェーン

[M5StickV で TOPPERS を動かしてみる](https://qiita.com/fukuebiz/items/7d2ef22b05a6e356cf39) では、Platform IOでインストールされたツールチェーンをそのまま使ってみましたが、TOPPERS BASE PLAFORM(ST) の標準で指定されている [The xPack GNU RISC-V Embedded GCC](https://xpack.github.io/riscv-none-embed-gcc/) を使用します。

以下の順にインストールします

- Node.js
- xpm
    - [How to install xpm](https://xpack.github.io/xpm/install/)
- [The xPack GNU RISC-V Embedded GCC](https://xpack.github.io/riscv-none-embed-gcc/)
    - [How to install the xPack GNU RISC-V Embedded GCC binaries](https://xpack.github.io/riscv-none-embed-gcc/install/)

### TOPPERS BASE PLAFORM(ST)

[M5StickV で TOPPERS を動かしてみる](https://qiita.com/fukuebiz/items/7d2ef22b05a6e356cf39) でダウンロードした３つのファイルに加えて、

TOPPERS BASE PLAFORM(ST): [asp_baseplatformv1.4.1_051120.tar.gz](https://www.toppers.jp/download.cgi/asp_baseplatformv1.4.1_051120.tar.gz)

M5StickV用のパッチ: [TOPPERS M5StickV patch](https://github.com/fukuen/toppers-m5stickv-patch)


をダウンロードします。

作業を行うディレクトリーに以下の4つのファイルを入れます。

```
asp-1.9.3.tar.gz
asp_arch_riscv_gcc-1.9.4.tar.gz
asp_baseplatformv1.4.1_051120.tar.gz
cfg-osx-static-1_9_5.tar.gz
toppers-m5stickv-patch.zip
```

解凍します

```bash
tar xvzf asp-1.9.3.tar.gz                     # 1. asp フォルダーが作成されます
tar xvzf asp_baseplatformv1.4.1_051120.tar.gz # 2. asp フォルダーに追加されます
tar xvzf asp_arch_riscv_gcc-1.9.4.tar.gz      # 3. asp_arch_riscv_gcc-1.9.4 フォルダーが作成されます
tar xvzf cfg-osx-static-1_9_5.tar.gz          # 4. cfg ファイルが作成されます
unzip toppers-m5stickv-patch.zip              # 5. toppers-m5stickv-patch-main ファイルが作成されます
```

3 〜 5 のファイルを asp フォルダーにコピーします

```bash
cp -pr asp_arch_riscv_gcc-1.9.4/asp/* asp

mkdir -p asp/cfg/cfg
cp -p cfg asp/cfg/cfg

cp -pr toppers-m5stickv-patch-main/asp/* asp
```

# ビルド

まず、カーネルをビルドします。

```bash
cd asp/OBJ/K210_GCC
mkdir libkernel
cd libkernel

#ツールチェーンのパス
PATH=$PATH:~/Library/xPacks/@xpack-dev-tools/riscv-none-embed-gcc/8.3.0-2.3.1/.content/bin

perl ../../../configure -T k210_gcc -f -g ../../../cfg/cfg/cfg
make depend
```

初回警告が表示されますので、キャンセルします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/7d12b27d-620f-15b7-b19a-4290a0966aab.png)

このまま許可をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/b7258a38-04e2-6caf-3cdd-4a87cfeebf88.png)

再度実行します。

```bash
make depend
```

開くをクリックすると、makeが開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/bdb66b95-3975-904a-7328-8ca4de8ae563.png)

これでビルドできるようになります。カーネルをビルドします。

```bash
make libkernel.a
```

# アプリビルド (TEST)

カーネルがビルドできたら、アプリをビルドします。

```bash
cd ../TEST
make depend
make
```

M5StickVをUSBで接続して、フラッシュメモリに書き込みます。

```
~/.platformio/packages/tool-kflash-kendryte210/kflash.py asp.bin
```

VSCodeのターミナル等でシリアル接続すると、次のようなログが出力されました。

```
TOPPERS/ASP Kernel Release 1.9.3 for K210 (Nov 24 2020, 21:28:00)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2014 by Embedded and Real-Time Systems Laboratory
            Graduate School of Information Science, Nagoya Univ., JAPAN
Copyright (C) 2017-2019 by Education Working Group TOPPERS PROJECT

mSystem logging task is started on port 1.

ASP TASK Monitor Release 1.2.0 for K210 (Nov 24 2020, 21:10:31)
Copyright (C) 2016-2019 by TOPPERS PROJECT Educational Working Group
mon>h
  Display BYTE     [start address] [end address]
          HALF     [start address] [end address]
          WORD     [start address] [end address]
          TASK
          REGISTER
  Set     BYTE     [start address]
          HALF     [start address]
          WORD     [start address]
          COMMAND  [mode]  mode=1 or (2)
          SERIAL   [port id]
          TASK     [task id]
  Task    ACTIVATE          (act_tsk)
          TERMINATE         (ter_tsk)
          SUSPEND           (sus_tsk)
          RESUME            (rsm_tsk)
          RELEASE           (rel_tsk)
          WAKEUP            (wup_tsk)
          PRIORITY [pri]    (chg_pri)
  Log     MODE     [logmask] [lowmask]
          TASK     [cycle time(ms)] [count]
          PORT     [no] [logno] [portaddress]
  Help    [arg1]
  Rtc     DATE  (year #) (month #) (day #)
          TIME  (hour #) (min   #) (sec #)
          INTM  mode(0-4)
          WAKEUP time(sec)
          CLOCK DATE:TIME
mon>
```

# アプリビルド (DEMO)

DEMOアプリをビルドします。

```bash
cd ../DEMO
make depend
make
```

M5StickVをUSBで接続して、フラッシュメモリに書き込みます。

```
~/.platformio/packages/tool-kflash-kendryte210/kflash.py asp.bin
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/290da1b2-5d10-2544-02cb-8cb478389b24.png)


# おわりに

TOPPERS BASE PLATFORM が動きました。他のデバイスも動かしてみたいと思います。