GR-PEACHオフライン開発環境の構築[On Windows 10]

GR_PEACH をオフラインで開発する環境を構築したので、以下、覚書として残します。

<font color="Red">**※2019/01/04追記**
e2studio 7.2.0 + OpenOCD は動作しましたが、OpenOCD の代わりに J-link を利用した場合、On Chip Debug 時に main 関数でブレークがかからない・・
他の方は、e2studio の 6.2.0 で問題なく実行されているようでしたので、 v6.3.0 R2 にして実行してみました。結果、e2studio + J-link のデバッグができました。但し、たまに 7.2.0 の時と同じような挙動になることもありました（ダウンロードしたり、リセットしたりしてると直る）。よって、原因は不明です。</font>

#0. 前提条件
- Windows 10 Pro 1809 64bit
- e2studio 7.2.0
- OpenOCD
- GR-PEACH

#1. e2studio のインストール
Renesasのサイト [統合開発環境 e2studio](https://www.renesas.com/jp/ja/products/software-tools/tools/ide/e2studio.html) より e2studio のインストーラ（setup_e2_studio_7_2_0.exe[2018/12/30 現在の最新版 7.2.0]）をダウンロードします。
ダウンロードしたインストーラを起動し、インストールします。

どうも VS2008 用及び VS2017 用の C++ 再頒布可能パッケージが必要のようです。
インストーラで自動インストールしてくれるようですが、なぜか私の環境では、VS2017 用がインストールに失敗し、e2studio のインストーラがエラーとなってしまいました。そこで、e2studio インストールする前に VS2017 用を手動でインストールして対応しました。
VS2017 用 再頒布可能パッケージは、以下からダウンロード可能です。
https://support.microsoft.com/ja-jp/help/2977003/the-latest-supported-visual-c-downloads

以下は、私がインストールした際のスナップショットです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/72b36c79-1317-456d-cba9-a33173fee651.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/00b8acf0-20a4-f84f-7ac8-1c6059c5b7dd.png)
**「Support Synergy Devices」及び「RZデバイス・サポート」**を選択します（※前者をインストールしないと make コマンドがインストールされないようです）。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/3699d936-effc-b925-725d-1cabb6f6c16d.png)
**「コラボレーション」「日本語言語パック」「RTOS」及び「Terminals」**を選択しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/868c5ebb-e1d1-4eec-5a35-aa5107b2890c.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/2719805d-d37b-76e2-df6a-226082096531.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/404717bc-b291-2a0e-1cf6-697a0fec4592.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/fa86d648-39f1-0803-8d37-5b801d05b637.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/eac23986-64dc-c174-c209-f90b9e20dde8.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/3f136696-8c2b-2414-593c-6f299057e6e6.png)

#2. OpenOCD のインストール
[GNU MCU Eclipse OpenOCD v0.10.0-10-20181020](https://github.com/gnu-mcu-eclipse/openocd/releases)　のインストーラをダウンロードします。
e2studio が 32bit アプリケーションなので、**32bit 版（gnuarmeclipse-openocd-win32-0.10.0-201601101000-dev-setup.exe）**となります。

#3. OpemOCD 設定ファイルのコピー
[renesas_gr-peach.cfg](https://os.mbed.com/media/uploads/RyoheiHagimoto/renesas_gr-peach.cfg) をダウンロードします。
ダウンロードした **renesas_gr-peach.cfg**を **C:\Program Files (x86)\GNU ARM Eclipse\OpenOCD\0.10.0-201601101000-dev\scripts\board** に格納します。

#4. e2studio の起動
インストールした e2studio を起動します、
ツールチェーン・タイプ選択画面では、**GCC ARM embedded** を選択し、登録します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/514ed52d-0a6e-84b9-2369-9ae7bc73503d.png)

#5. GR-PEACH サンプルプロジェクトのビルド
mbed のサンプルプロジェクトをエクスポートしたものを e2studio にインポートしてみましたが、e2studio でのビルド時にビルドエラー（<font color="Red">**ヘッダファイルが見つからない**</font>）が発生してビルドできませんでした。以下に同じ問題でチケットが発行されており、Closed していますが、私の環境では解決できませんでした。

- [Error occurs when building exported mbed-os programs on e2studio #7155](https://github.com/ARMmbed/mbed-os/issues/7155)
 
<font color="Red">**※2019/01/04追記**</font>
ヘッダファイルが見つからない件ですが、インクルードパスを解決してみましたが、最終的に以下のエラーでビルドできませんでした。諦めました・・

```console
  :
  :
'Building target: mbed-os-example-blinky.elf'
'Invoking: Cross ARM C++ Linker'
arm-none-eabi-g++ @"mbed-os-example-blinky.elf.in"
arm-none-eabi-g++: error: unrecognized command line option '--wrap=main'
arm-none-eabi-g++: error: unrecognized command line option '--wrap=_malloc_r'
arm-none-eabi-g++: error: unrecognized command line option '--wrap=_free_r'
arm-none-eabi-g++: error: unrecognized command line option '--wrap=_realloc_r'
arm-none-eabi-g++: error: unrecognized command line option '--wrap=_memalign_r'
arm-none-eabi-g++: error: unrecognized command line option '--wrap=_calloc_r'
arm-none-eabi-g++: error: unrecognized command line option '--wrap=exit'
arm-none-eabi-g++: error: unrecognized command line option '--wrap=atexit'
make: *** [mbed-os-example-blinky.elf] Error 1
makefile:242: recipe for target 'mbed-os-example-blinky.elf' failed

07:02:34 Build Failed. 2 errors, 79 warnings. (took 3m:52s.706ms)
```

とりあえず、[がじぇるね GR-PEACH](http://gadget.renesas.com/ja/product/peach.html) で公開されている e2studio用プロジェクトコード [peach_mbed_style_V203.zip](http://gadget.renesas.com/software/e2studio/peach_mbed_style_V203.zip) を利用して動作確認しました。

**peach_mbed_style_V203.zip** を解凍し、**peach_mbed_style** フォルダをワークスペースにコピーします。

e2studio のメニューから **[ファイル]→[インポート...]** を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/d1dde897-bf75-2f53-92d8-1bbc1d099424.png)

インポート画面で、**[一般]→[既存プロジェクトをワークスペースへ]**を選択し、**[次へ]**をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/21673019-000e-35be-f236-0cf39b4b19c8.png)

**「ルート・ディレクトリーの選択」**で先ほどのフォルダを選択し、**「終了」**ボタンでインポートされます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/da4d6340-da4e-ee2f-adde-e129be56794b.png)

インポートできたら、ビルドします。
ビルドの前に、**Toolchain** のバージョンを確認します。
**peach_mbed_style** プロジェクトを選択し、右クリックで**プロパティ画面**を表示します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/4379ea40-c32d-cd1f-151c-62060c4d7001.png)

**[C/C++ ビルド]→[設定]**を選択し、設定画面で **[Toolchainタブ]** を表示します。**「Use integrated toolchaom version:」**で　**"4.9.3.20150529"** を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/ca83c924-0380-e202-cefa-f5a2940b6c56.png)

設定が完了したら、**[Apply and Close]** ボタンで画面を閉じ、プロジェクトをビルドします（※一応、プロジェクトをクリーンした後、ビルドを実行）。

```console
 :
 :
'Finished building: ../main.cpp'
' '
'Building target: peach_mbed_style.elf'
'Invoking: Cross ARM C++ Linker'
arm-none-eabi-gcc @"peach_mbed_style.elf.in"
'Finished building target: peach_mbed_style.elf'
' '
'Invoking: Cross ARM GNU Create Flash Image'
arm-none-eabi-objcopy -O binary "peach_mbed_style.elf"  "peach_mbed_style.bin"
'Finished building: peach_mbed_style.bin'
' '
'Invoking: Cross ARM GNU Print Size'
arm-none-eabi-size --format=berkeley "peach_mbed_style.elf"
   text	   data	    bss	    dec	    hex	filename
  77244	   2360	  44304	 123908	  1e404	peach_mbed_style.elf
'Finished building: peach_mbed_style.siz'
' '

17:52:20 ビルドが完了しました(所要時間 7m:2s.300ms)
```

#6. GR-PEACH サンプルプロジェクトのデバッグ
ビルドしたサンプルプロジェクトを **OpenOCD** を利用してデバッグします。

**「実行」→「デバッグ構成」**をクリックして**「GDB OpenOCD Debugging」**を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/422ac18d-52ca-e7cd-9ef1-2391411b4928.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/fa7c2de8-e43c-3ac6-1a75-15c36dcd1007.png)

ダブルクリックすると **peach_mbed_style Debug[local]** の項目が追加され、設定画面が表示されます。

**「メイン」**タブは、デフォルトのままです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/5a05cd8b-19f1-7e28-f72a-9917f1c38b0c.png)

**「Debugger」**タブでは、**Config options:** に**「-f board/renesas_gr-peach.cfg」**を記載します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/befbe6bf-5213-1cc2-21ed-78d647e3d71c.png)

**「Startup」タブでは、**「Initial Reset.」**と**「Enable ARM semihosting」**のチェックをはずします。
また、**Load Symbols and Executable** 部分の「Load executable」のチェックをはずします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/cdbe476d-1052-90f5-aaaa-ccaa2e79f4b3.png)

**「ソース」「共通」**及び**「SVD Path」**タブは、デフォルトのままです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/d3630fd5-2855-52b0-d25a-5e24fa7c3b7d.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/35001848-77cf-0830-9354-dba33a46f289.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/d186de0c-97b3-c475-a677-3e240652ce12.png)

上記全ての変更を**[適用]ボタンで反映します。

USBケーブルを GR-PEACH に接続（基板外側のUSB）し、**"Debug\peach_mbed_style.bin"** を **MBED** ドライブにコピーします。
**[デバッグ」**ボタンをクリックすると、デバッグが始まります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/09cb703a-cdb3-22b1-f07b-7789650b05e0.png)

※ステップ実行する際、プロジェクトのプロパティ画面（**C/C++ ビルド→[設定]→[ツール設定]タブ→[Optimization]→[Optimization Level]**）**最適化を **None(-O0)** *(default: Optimize more(-O2))* にしたほうがステップ実行はわかりやすいと思います。

※[export to e2studio [lang:ja]@mbed 公式のページ](https://os.mbed.com/users/RyoheiHagimoto/notebook/export-to-e2studio-langja/)では、リセット時に **monitor reset init** を入力するように記載がありますが、私の環境では、Console で入力できないようでした（挙動がわからない）。
そこで、デバッグをやめる場合、ストップボタンで停止しています（特に問題なくデバッグできています）。

#7. 参考にさせていただいたページ
- [export to e2studio [lang:ja]@mbed 公式のページ RyoheiHagimotoさん](https://os.mbed.com/users/RyoheiHagimoto/notebook/export-to-e2studio-langja/)
- [GR-LYCHEE用オフライン開発環境の手順@mbed 公式のページ dkatoさん](https://os.mbed.com/users/dkato/notebook/offline-development-lychee-langja/)


以上です。