VSCodeでTOPPERS/ASP3アプリをビルド＆実行する

# TL;DR

- Visual Studio CodeにてナウでヤングなTOPPERS/ASP3アプリ開発環境を整えた！！
- でもそっからどうすんの？？という方向けの手引きです
    - ThingsだけじゃなくてInternet ofつまりIoTじゃね？？という方には，[こんなセミナー](https://algyan.connpass.com/event/136354/)ぜひどうぞ！！

# はじめに

本記事では，Visual Studio CodeでTOPPERS/ASP3アプリをビルド＆実行する方法を説明します．GR-PEACH向けです．
下記記事のいずれかに従って開発環境を構築済みであることが前提です．

- [Windows篇：VSCodeでTOPPERS/ASP3アプリの開発環境を整備する](https://qiita.com/takasehideki/items/59e3d179d462142a8633)
- [Mac篇：VSCodeでTOPPERS/ASP3アプリの開発環境を整備する](https://qiita.com/takasehideki/items/f897e6e063ceb05a9f35)
- [Ubuntu篇：VSCodeでTOPPERS/ASP3アプリの開発環境を整備する](https://qiita.com/takasehideki/items/6119d50dbd8e0a34d64d)

# ターゲット

* マイコンボード：[GR-PEACH](https://www.core.co.jp/product/m2m/gr-peach/index.html)
* [TOPPERS/ASP3カーネル GR-PEACH簡易パッケージ 3.2.0 (リリース日：2017-07-21)](http://toppers.jp/asp3-e-download.html)
* ホストPC環境 （詳細な環境構築の手順はそれぞれのQiita記事を参照）
  * [Windows 10 Professional](https://qiita.com/takasehideki/items/59e3d179d462142a8633)
  * [macOS Mojave (10.14.5)](https://qiita.com/takasehideki/items/f897e6e063ceb05a9f35)
  * [Ubuntu 18.04.2 LTS](https://qiita.com/takasehideki/items/6119d50dbd8e0a34d64d)

* 開発ツール
  * IDE：[Visual Studio Code](https://code.visualstudio.com) (1.35.1で確認済み)
  * クロスコンパイラ：[arm-none-eabi Version 6-2017-q2-update](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads/6-2017-q2-update)
  * デバッガ：[OpenOCD 0.10.0-12-20190422](https://github.com/gnu-mcu-eclipse/openocd/releases/tag/v0.10.0-12-20190422)

# ワークスペースのclone

VSCodeの環境設定済みのものを下記に用意しました（Starくださぁい！

- https://github.com/takasehideki/asp3_gr_peach_vscode

`$ git clone`するなり[Zipのままダウンロード](https://github.com/takasehideki/asp3_gr_peach_vscode/archive/master.zip)するなりよろしくどうぞです．
TOPPERS信頼と実績の`sample1`が入っています．

リポジトリのディレクトリ直下にある`asp3_gr_peach_vscode.code-workspace`を，VSCodeから`ワークスペースを開く...`してください．

`apps`がサンプル含むアプリのソースを格納するディレクトリ，
`asp3`はカーネルのソースが格納されているディレクトリを想定しています．

# アプリのビルド

`ターミナル > ビルド タスクの実行...` または `Ctrl_Shift+B` で出てくるビルドタスクを選択するだけです．

![build.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240349/4db74b4c-1f55-3b81-b830-53e272aaba8f.jpeg)

それぞれ下記の意味があります．

- build allapps：`apps/`以下のアプリを一括してビルドします
- build sample1：`apps/sample1`のみをビルドします
- clean allapps：`apps/`以下のアプリを一括してcleanします
- clean sample1：`apps/sample1`のみをcleanします
- realclean allapps：`apps/`以下のアプリを一括してreal cleanします
    - ほとんど使わないかと，，，

Windowsだと初回のビルド時には下記のように
> このワークスペースによるターミナル シェルの変更を許可しますか？

という表示が出ます．このときは気にせず**「許可」**をクリックしてください（msys64でmakeコマンドを走らせるための設定です）

![build_ok.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240349/ece8c630-7def-1bd2-4e51-4b1122383661.jpeg)

# アプリの実行

ここからは[GR-PEACH](https://www.core.co.jp/product/m2m/gr-peach/index.html)をお持ちの方向けになります（買いましょう！！

GR-PEACHの外側のポートとホストPCをmicroUSBケーブルで接続すると，GR-PEACHはUSBマスストレージとして認識されます．
あとは`apps/sample1/asp.bin`をGR-PEACHに配置するだけです．あら簡単．

TeraTermやpicocom等のシリアル通信ターミナルで，下記の設定にて接続します．

- ボーレート: 115200
- データ: 8bit
- パリティ: none
- ストップ: 1bit
- フロー制御: none

すると，ASP3カーネルが起動したっぽい色々なメッセージが表示されるのが確認できるはずです．

![sample1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240349/9931959f-7713-361a-f505-f7d9e49893a6.jpeg)

ホストPCのキーボード入力やGR-PEACHのPushSWでいろいろ表示が切り替わります．詳しいことは[ソース嫁](https://github.com/takasehideki/asp3_gr_peach_vscode/blob/master/apps/sample1/sample1.c)でお願いします^^;

# デバッグ方法

`デバッグ > デバッグの開始`または`F5`でデバッグできます．
break置いたりいろいろどうぞです．

![debug.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240349/ef5dac72-ad4a-c8e3-c7fa-4eaed6e37a94.jpeg)

## macの場合は，，，

mac版のVisual Studio Codeだと，標準設定ではデバッガ連携がうまくいきません．
`arm-none-eabi-gdb`が署名無しアプリとなるのですが，これをVSCodeから実行するところで拡張機能C/C++との具合が悪くなるようです．

[環境構築の記事の#デバッガの署名](https://qiita.com/takasehideki/items/f897e6e063ceb05a9f35#%E3%83%87%E3%83%90%E3%83%83%E3%82%AC%E3%81%AE%E7%BD%B2%E5%90%8D)を参考にして対応することができます．

## Ubuntuの場合は，，，

Ubuntuでは，やはり標準的にはデバッガ連携がうまくいかないようです．
GR-PEACHがシリアルデバイスとして認識される`/dev/ttyACM0`へのアクセスに`sudo`権限が必要となるのですが，これをVSCodeのlaunch.jsonなどから実行することができないようです．

つまり，，，`sudo`でVSCodeを起動しましょう^^;

```bash
$ sudo code --user-data-dir
```

もちろんなのですが，<font color="red">VSCodeをスーパーユーザで実行することは推奨されません！</font>
自己責任かつデバッグ時のみ最低限に留めるのが良いです．

## ターミナル上でデバッグ

CUI大好きさん向けです．ターミナル上でももちろんデバッグ実行できます．
[このようにPATH設定されている](https://qiita.com/takasehideki/items/f897e6e063ceb05a9f35#path%E3%81%AE%E8%A8%AD%E5%AE%9A%E4%BB%BB%E6%84%8F)ことが前提となります．

2つのターミナルを開いて，それぞれで下記を実行してください．

```bash
$ sudo openocd -f interface/cmsis-dap.cfg -f target/renesas_rza1h_swd.cfg 
```

```bash
$ cd asp3_gr_peach_vscode/apps/sample1
$ arm-none-eabi-gdb asp.elf -x ../../asp3/target/gr_peach_gcc/gdb_rom.ini 
```

その後は`continue`等のGDBコマンドがご自由に使えます．

# アプリの追加方法（中級者向け）

TOPPPERSとVSCode完全に理解してる方向けの情報です．

アプリを追加したい場合は，`apps/`以下に新たなディレクトリを作って，`../../asp3/configure.rb`するなりしてください．
`sample1`をコピってテンプレートとするのでも良いと思います．

ビルドタスクの追加は，`apps/.vscode/tasks.json`を編集してください．

デバッグ対象のアプリの変更は，`apps/.vscode/launch.json`の`sample1`をディレクトリ名に全置換すれば良いはずです．
デバッグ対象に応じてJSONを編集するというアンマリなやり方なので，エレガントな良い方法をご存知でしたら教えてくださいませ^^;

# ハンズオンセミナー開催！

せっかく開発環境を整えたんだから使ってみたい！
ThingsだけじゃなくてInternet ofつまりIoTじゃね？？

そんなあなたに，こんなセミナーのご紹介です．

- [PinKitプレゼント付き！TOPPERSカーネル＋Azure IoT 体験ハンズオン@横浜](https://algyan.connpass.com/event/136354/)
    - 2019/07/27(土)　13:30 〜 18:00
    - 会場：情報科学専門学校６F


[![banner.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240349/2de2a1a6-e6d1-622b-6bd4-06c70975fc3f.jpeg)](https://algyan.connpass.com/event/136354/)

TOPPERSとAzure IoT Hubを体験しよう！
しかもなんとPinKit(GR-PEARCH+センサーボード)をプレゼント！！

TOPPERSプロジェクトの運営委員として活躍する技術者と，Microsoftの専門家をお招きして，デバイスからクラウドまで一気通貫！のTOPPERS＋Azureアプリの開発を実際に学ぶことができます．
ぜひぜひどうぞです！！

# 開発コンテスト開催！

そして開発したIoTなシステム，ぜひともお披露目しませんか！？？

[![toppers](http://toppers.jp/imgs/logo.gif)](http://toppers.jp/contest.html)

TOPPERSプロジェクトでは「[活用アイデア・アプリケーション開発コンテスト](http://toppers.jp/contest.html)」を開催しています！
TOPPERSプロジェクトの開発成果物を活用するアイデア，もしくは開発成果物を用いたアプリケーションを募集します．
上記ハンズオンセミナーで学んだ知識を使って，IoT作品を開発して応募しませんか？

募集期間は9月1日までです． 
こちらもぜひどうぞ！！



# 参考ページ

- [MSYS2で快適なターミナル生活](https://qiita.com/Ted-HM/items/4f2feb9fdacb6c72083c)
- [MSYS2 +α - 構築手順・備忘録](https://qiita.com/yuukiyouki/items/a84c14240429e453428b)
- [VSCodeでTOPPERSのコードをgdbデバッグする](https://qiita.com/mitsu48/items/5c6fec6064af6c4a2c4e)