Gitpodで始めるTOPPERS/ATK2を使った車載ソフトプログラミング

# Gitpodとの出会い
　おそらく初めて目にしたのは、[EclipseCon Flance 2018](https://events.eclipse.org/2018/france/)でのTypofoxのデモ展示だったと思う。
　GithubのリポジトリURLをちょっと変更するだけでWebIDEとしてキビキビ動作しており、確かJSのプログラムデモだったと記憶があるがEclipse Theiaのデモとしてはとても魅力的に見えた。
開発していたエンジニアと少しだけ話ができたが、CDDなどのプラグインはまだ未定ということもあって、エディタとしては使えそうだったけど組み込みで使う事にはまだ早いかなという印象だった。
　ただあれ以降、自分の開発環境をコンテナ、シミュレーション、クラウドへシフトしてきたのはそれだけ影響が強かったのだと思うが、Gitpodはその後、１・２度エディタを動かしてそのままになっていた。
　そんな忘れかけていたGitpodと再会したのは、[オープンソース化の記事](https://www.publickey1.jp/blog/20/githubgitlabwebidegitpodgithub_codespaces.html)だった。DockerイメージもGitpod側で動くことがわかり、その週末の[箱庭WG](https://toppers.github.io/hakoniwa/)の合宿中に[ATK2](https://www.toppers.jp/atk2.html)のビルド環境を作って動かすことができたのでそのご紹介。（ポエム終わり）

Gitpodはブラウザだけで始められるソフトウェア開発環境なので、実機が手元にないとか、パソコンのスペックや容量が足りないといった消極的な理由だけじゃなく、組込みソフトでも積極的に開発効率を向上できるツールの1つとして使えます！

# 利用環境
- Github, Gitlab, Bitbucketのいずれかのアカウント
- ブラウザが使える環境

以上です。
Githubのアカウントで確認しています。他のアカウントやブラウザだとIEは環境が無いので試してませんがほぼどれでも動いています。
スマホやタブレットでも動くことは確認しました。

## Gitpodの料金
Gitpodはパブリックなリポジトリであれば[月50時間までは無料](https://www.gitpod.io/pricing/)で使えますので、以下の内容も無料で始められます。
週末や夜のオープンソース活動にはちょうどいい感じかなと思います。

# ワークスペースの起動
これをクリックするだけです。
https://www.gitpod.io/#https://github.com/mitsut/toppers-sample-rh850

Gitpodのページが立ち上がり、こんな画面がでてきますので、「Login with Github & Launch Workspace」 をポチリします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26274/27716efb-2513-de25-0d39-371fe2afe539.png)

githubのログインを済ませるとこんな感じで表示されるはずです。（URLは個人で異なります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26274/3022b285-0c80-d3fe-c69c-40dff0f98d08.png)

エディタの操作に関してはVS Codeを触ったことがある方であれば、見た目もほぼ同じですし支障はないかと思います。
# TOPEPRS/ATK2のsampleのビルドと実行
ATK2に用意されているsampleを使ってビルドとシミュレーションを用いた実行の手順になります。
ATK2のターゲットとしてはRH850F1Kを用い、シミュレーション環境としてathrillを使っています。

## アプリケーションフォルダの作成と移動
フォルダを作成し、移動します。

```
$ mkdir sample1 ; cd sample1
```
カレントディレクトリが`/workspace/toppers-sample-rh850/sample1`に移動し、
左側のエクスプローラに新しく `sample1`のフォルダが追加されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26274/c608d309-4604-e888-0e67-5ae38e23fb87.png)

## シミュレーション用の設定ファイルの準備
```
cp $HAKONIWA_HOME/athrill-target-rh850f1x/params/rh850f1k/atk2-sc1/*.txt .
```

sample1フォルダにシミュレーション起動時に必要となる `device_config.txt`と`memory.txt`ファイルを準備します。（ビルド後でも構いません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26274/dc81a9b0-e489-45ae-fc4d-3d6ea59c562e.png)

## Configureの実行（Makefileの生成）
TOPPERSのビルドを行う前にConfigureを実行して、Makefileやアプリケーションファイルの用意をします。

```
../toppers-atk2-sc1/configure -T hsbrh850f1k_gcc -g ${HAKONIWA_HOME}/cfg
```

コンソールでの出力結果はこんな感じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26274/be620098-d764-b069-8525-dd03e88012b2.png)
フォルダにもMakefileを含めていくつかファイルが増えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26274/186fa8dc-e3d8-6f53-6ebb-6cd71bc32637.png)

## ビルド
これだけです

```
make
```

いくつかワーニングは出ますが、`sample1フォルダ` に `atk2-sc1` というファイルができていればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26274/d2eb6f3c-30f0-889b-7216-415e94eb703c.png)

## 実行（シミュレーション実行）
ビルドできたATK2のバイナリファイルをathillで実行させます。

```
athrill2 -c1 -i -d device_config.txt -m memory.txt atk2-sc1
```

athrillが起動して止まりますので、`c`コマンドを押して実行を継続します。
以下のように出力され、ATK2が動き出しました。

```
gitpod /workspace/toppers-sample-rh850/sample1 $ athrill2 -c1 -i -d device_config.txt -m memory.txt atk2-sc1
core id num=1
ROM : START=0x0 SIZE=1024
RAM : START=0xfede8000 SIZE=512
ELF SET CACHE RIGION:addr=0x0 size=62 [KB]
Elf loading was succeeded:0x0 - 0xf999 : 62.409 KB
Elf loading was succeeded:0xf99c - 0x1215c : 0.220 KB
ELF SYMBOL SECTION LOADED:index=16
ELF SYMBOL SECTION LOADED:sym_num=597
ELF STRING TABLE SECTION LOADED:index=17
DEBUG_FUNC_FT_LOG_SIZE=1024
[DBG>
HIT break:0x0
[NEXT> pc=0x0 prc_support.S 254
c
[CPU>
TOPPERS/ATK2-SC1 Release 1.4.2 for HSBRH850F1K (Dec  6 2020, 04:16:56)

Input Command:
```

# まとめ
今回はGitpodを使って、TOPPERS/ATK2のサンプルプログラムをブラウザだけでビルド、実行させる紹介をしました。
RH850なんて車載向けの特殊なチップではありますが、環境をいれかればいろんなものに対応できます。
組み込み業界でもテレワーク時代に本格的にクラウド開発へ移行したいとか、多人数での環境を用意したいなどの場合は、Eclipse cheを使った環境構築の方が効果的ですので、[こんな](https://mikoto2000.blogspot.com/2020/12/toppers.html)とか[こんなサービス](https://camino.pizzafactory.jp/en/)もありますのでご興味があればのぞいてみてはいかがでしょうか。