TOPPERS/ASP3 3.6.0をRaspberry Pi Picoで動かす

##はじめに
Raspberry Pi財団が開発・提供しているワンチップマイコンボード Rapsberry Pi Pico（以後、ラズパイPIco）で動作する RTOSの **TOPPERS/ASP3 3.5.0**のソースコードがTOPPERSプロジェクトから公開されています。
ただし、TOPPERS/ASP3のカーネル本体は **3.6.0**が最新版としてリリースされていて、ビルド環境の制限などが改善されています。

このため、ラズパイPico用TOPPERS/ASP3 3.5.0のソースコードを流用し、TOPPERS/ASP3 3.6.0をラズパイPicoで動作させようと考えました。

・ASP3 3.5.0 Raspberry Pi Pico 簡易パッケージ
　https://www.toppers.jp/asp3-e-download.html#raspi_pico

・TOPPERS/ASP3のページ
　https://www.toppers.jp/asp3-kernel.html

##開発環境

以前にQiitaへ記した「TOPPERS/ASP3のビルド環境の検証」の「<a href="https://qiita.com/Yukiya_Ishioka/items/2317b35ab0b98e15f6d0#環境構築">環境構築</A>」にラズベリーパイを使った開発環境の構築方法を記してあるので、こちらを参照ください。

・「TOPPERS/ASP3のビルド環境の検証」の「環境構築」
　https://qiita.com/Yukiya_Ishioka/items/2317b35ab0b98e15f6d0#環境構築

##ソースのダウンロード
「TOPPERS/ASP3カーネル ターゲット非依存部パッケージ」の**asp3-3.6.0.tar.gz**と「TOPPERS/ASP3カーネル簡易パッケージ・Raspberry Pi Pico簡易パッケージ」の
**asp3_raspberrypi_pico_gcc-20211016.tar.gz**を使います。

以下の URLから各ファイルをダウンロードしてください。

・asp3-3.6.0.tar.gz
　https://www.toppers.jp/download.cgi/asp3-3.6.0.tar.gz
・asp3_raspberrypi_pico_gcc-20211016.tar.gz
　https://www.toppers.jp/download.cgi/asp3_raspberrypi_pico_gcc-20211016.tar.gz

●参考
・「TOPPERS/ASP3カーネル個別パッケージのダウンロード」ページ
　https://www.toppers.jp/asp3-d-download.html
・「TOPPERS/ASP3カーネル簡易パッケージのダウンロード」ページ
　https://www.toppers.jp/asp3-e-download.html


##ソースツリーの構築
前項でダウンロードしたソースファイルから必要なファイル、ディレクトリを集めてビルドに必要なソースツリーを構築します。

###ディレクトリの作成
ホームディレクトリ配下に**toppers**ディレクトリを作成し、ここに先にダウンロードした**asp3-3.6.0.tar.gz**と**asp3_raspberrypi_pico_gcc-20211016.tar.gz**を配置します。

```
/home/ubuntu/toppers
```

```
-rw-rw-r--  1 ubuntu ubuntu  718432 Dec 13 19:09 asp3-3.6.0.tar.gz
-rw-rw-r--  1 ubuntu ubuntu 2171357 Dec 13 19:08 asp3_raspberrypi_pico_gcc-20211016.tar.gz
```

/home/ubuntu/toppersディレクトリへ移動し、**temp**ディレクトリを作成します。

```
mkdir temp
```

###ソースファイルの展開
まず、/home/ubuntu/toppersディレクトリで**asp3-3.6.0.tar.gz**を展開します。

```
tar xzf asp3-3.6.0.tar.gz
```

```
ubuntu@ubuntu:~/toppers$ ll
total 2844
drwxrwxr-x  4 ubuntu ubuntu    4096 Dec 14 00:15 ./
drwxr-xr-x 37 ubuntu ubuntu    4096 Dec 14 00:10 ../
drwxrwxr-x 16 ubuntu ubuntu    4096 Dec 14 00:15 asp3/
-rw-rw-r--  1 ubuntu ubuntu  718432 Dec 13 19:09 asp3-3.6.0.tar.gz
-rw-rw-r--  1 ubuntu ubuntu 2171357 Dec 13 19:08 asp3_raspberrypi_pico_gcc-20211016.tar.gz
drwxrwxr-x  2 ubuntu ubuntu    4096 Dec 14 00:13 temp/
```

次に**temp**ディレクトリへ移動して**asp3_raspberrypi_pico_gcc-20211016.tar.gz**を展開します。

```
cd temp
tar xzf ../asp3_raspberrypi_pico_gcc-20211016.tar.gz
```

```
ubuntu@ubuntu:~/toppers/temp$ ll
total 12
drwxrwxr-x  3 ubuntu ubuntu 4096 Dec 14 00:15 ./
drwxrwxr-x  4 ubuntu ubuntu 4096 Dec 14 00:15 ../
drwxrwxr-x 16 ubuntu ubuntu 4096 Dec 14 00:15 asp3/
```

###ビルド用のソースツリーの構築
元の/home/ubuntu/toppersディレクトリへ戻り、TOPPERS/ASP3 3.6.0本体である **asp3ディレクトリ**へ、Raspberry Pi Pico簡易パッケージのソースが展開されている**temp/asp3**ディレクトリから３つのディレクトリをコピーします。

１）**arch/arm_m_gcc** ディレクトリのコピー
２）**target/raspberrypi_pico_gcc** ディレクトリコピー
３）**tecsgen** ディレクトリのコピー

```
/bin/cp -a temp/asp3/arch/arm_m_gcc ./asp3/arch/
/bin/cp -a temp/asp3/target/raspberrypi_pico_gcc ./asp3/target/
/bin/cp -a temp/asp3/tecsgen ./asp3
```

ここまででビルドに必要なソースツリーの構築は完了です。

```
/home/ubuntu/toppers
 |--asp3
 |  |--MANIFEST
 |  |--README.txt
 |  |--arch
 |  |  |--arm_m_gcc
 |  |--gcc
 |  |--simtimer
 |  |--tracelog
 |  |--cfg
 |  |--configure.rb
 |  |--doc
 |  |--extension
 |  |--include
 |  |--kernel
 |  |--library
 |  |--sample
 |  |--syssvc
 |  |--target
 |  |  |--dummy_gcc
 |  |  |--raspberrypi_pico_gcc
 |  |--tecs_kernel
 |  |--tecsgen
 |  |--test
 |  |--test_cfg
 |  |--utils
 |
 |--temp
 |  |--asp3
 |
 |--asp3-3.6.0.tar.gz
 |--asp3_raspberrypi_pico_gcc-20211016.tar.gz
```

##ラズパイPico用TOPPERS/ASP3のビルド
ラズパイPico用のTOPPERS/ASP3をビルドします。

###ビルドディレクトリの作成
はじめにビルド用のディレクトリを作成し、移動します。

```
mkdir build
cd build/
```

```
/home/ubuntu/toppers
 |--asp3
 |--build
```

###TOPPERS/ASP3のビルド
TOPPERS/ASP3のビルドを行います。

まず、以下のコマンドでラズパイPico用のコンフィギュレーションを行い、Makefileなどを生成します。

```
../asp3/configure.rb -T raspberrypi_pico_gcc
```

```
ubuntu@ubuntu:~/toppers/build$ ../asp3/configure.rb -T raspberrypi_pico_gcc
Generating Makefile from ../asp3/sample/Makefile.
ubuntu@ubuntu:~/toppers/build$ ll
total 32
drwxrwxr-x 3 ubuntu ubuntu  4096 Dec 14 00:38 ./
drwxrwxr-x 5 ubuntu ubuntu  4096 Dec 14 00:36 ../
-rw-rw-r-- 1 ubuntu ubuntu 17428 Dec 14 00:38 Makefile
drwxrwxr-x 2 ubuntu ubuntu  4096 Dec 14 00:38 objs/
```

**make**コマンドでビルドを開始します。

```
make
```

以下のような表示が出て、aspファイルが生成されたらビルド成功です。

```
Memory region         Used Size  Region Size  %age Used
           FLASH:       24984 B         2 MB      1.19%
             RAM:       13480 B       264 KB      4.99%
arm-none-eabi-nm -n asp > asp.syms
arm-none-eabi-objcopy -O srec -S asp asp.srec
ruby ../asp3/cfg/cfg.rb --pass 3 --kernel asp -O -I. -I../asp3/include  -I../asp3/target/raspberrypi_pico_gcc -I../asp3/
arch/arm_m_gcc/rp2040 -I../asp3/arch/arm_m_gcc/common -I../asp3/arch/gcc -I../asp3 -I../asp3/sample -I./gen -I../asp3/te
cs_kernel -T ../asp3/target/raspberrypi_pico_gcc/target_check.trb \
                        --rom-symbol asp.syms --rom-image asp.srec
configuration check passed
make[1]: Leaving directory '/home/ubuntu/toppers/build'
```

```
-rw-rw-r-- 1 ubuntu ubuntu  17428 Dec 14 00:38 Makefile
-rwxrwxr-x 1 ubuntu ubuntu 426368 Dec 14 00:41 asp*
-rwxrwxr-x 1 ubuntu ubuntu  75004 Dec 14 00:41 asp.srec*
-rw-rw-r-- 1 ubuntu ubuntu   9109 Dec 14 00:41 asp.syms
```

###uf2ファイルへの変換
ラズパイPicoへのプログラムの書き込みは、**elf2uf2**というコマンドを使いuf2ファイルへ変換して、このuf2ファイルをラズパイPicoへコピーします。
**elf2uf2**コマンドは、ラズパイPico-SDKをビルドすると生成されます。ビルド方法などはラズパイPico-SDKのgithubのページを参照してください。

・ラズパイPico-SDKの**github**
　https://github.com/raspberrypi/pico-sdk

ここでは、**elf2uf2**コマンドを、/home/ubuntu/toppers/buildディレクトリへコピーし、以下のコマンドを実行します。

```
./elf2uf2 asp asp.uf2
```

成功すると**asp.uf2**ファイルが生成されます。

```
ubuntu@ubuntu:~/toppers/build$ ll asp.uf2
-rw-rw-r-- 1 ubuntu ubuntu 50176 Dec 14 00:50 asp.uf2
```

##動作確認
ビルドしたTOPPERS/ASP3 3.6.0のプログラムをラズパイPicoで実行するための手順を記します。

###UARTの接続
今回使用した**Raspberry Pi Pico簡易パッケージ**では、GP0とGP1がそれぞれUARTのTX、RXとして設定され、シリアル入出力に使用可能です。
GP0、GP1、GNDを USB-シリアル変換モジュールでPCと接続し、このCOMポートを115200bpsでTeraTermなどの端末ソフトで開くとサンプルプログラム出力結果を表示することができます。

###ファイルの書き込み
生成された**asp.uf2**ファイルをラズパイPicoへ書き込めばTOPPERS/ASP3 3.6.0をラズパイPicoで動作させることができます。
ラズパイPicoへ書き込みは、ビルドに使ったubuntuマシンへ接続、マウントしてコピーするか、
**asp.uf2**ファイルをWindowsPCなどへコピーし、エクスプローラーでラズパイPicoへコピーすることで行えます。

###実行結果
**asp.uf2**ファイルのラズパイPicoへの書き込みに成功すると、端末上に以下のような情報が出力され、動作を確認することができます。


```
TOPPERS/ASP3 Kernel Release 3.6.0 for RaspberryPi Pico:ARM Cortex-M0+ (Dec 14 2021, 00:41:11)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2020 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).
task1 is running (001).   |
task1 is running (002).   |
task1 is running (003).   |
task1 is running (004).   |
task1 is running (005).   |
task1 is running (006).   |
task1 is running (007).   |
task1 is running (008).   |
task1 is running (009).   |
task1 is running (010).   |
task1 is running (011).   |
task1 is running (012).   |
task1 is running (013).   |
task1 is running (014).   |
task1 is running (015).   |
task1 is running (016).   |
task1 is running (017).   |
task1 is running (018).   |
task1 is running (019).   |
task1 is running (020).   |
task1 is running (021).   |
task1 is running (022).   |
task1 is running (023).   |
```

##最後に
表面上はTOPPERS/ASP3 3.5.0との違いは分かりませんが、3.6.0へ上げることでビルド環境の改善や 'たぶん' 不具合などが改善されてると思うので、最新版のTOPPERS/ASP3 3.6.0をラズパイPicoで試してみてはいかがでしょうか。
- 以上 -