NUCLEO-F401REでTOPPERS/ASPを動かす(Mac+Eclipse版)

[NUCLEO-F401RE で TOPPERS/ASP(RTOS)を動かす](http://qiita.com/exshonda/items/bf691541526975b8f78c)
を見て、Macしかないけどやってみたいと思った方向けです。

## Eclipseを選択したわけ
元記事は[TrueSTUDIO](http://atollic.com/truestudio/)を使っているのですが、[ダウンロードページ](http://atollic.com/resources/download/)を見ると...

<img width="609" alt="TrueSTUDIO-supportedOS.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/f14f7398-c2f4-2d15-be0d-5a54221b1231.png">

Mac版は「Coming 2017」となってるんですね。もうすぐなので待つのも一つの手でしょうけど、2017年のいつリリースされるかわからないので、別の手段を考えることにします。
TrueSTUDIOはEclipseベースなので、それならEclipseが無難かなということでEclipseにしました。

## 用意するハードウェア
元記事と基本的に同じです。

* NUCLEO-F401RE
* USB(miniB)ケーブル
* PC(Mac)

## 用意するソフトウェア

* [Eclipse(CDT)](http://www.eclipse.org/downloads/eclipse-packages/)
 * Eclipse IDE for C/C++ Developersをインストール
* [GNU ARM Eclipse](http://gnuarmeclipse.github.io/toolchain/install/#toolchain-path)
 * Eclipse MarketPlaceからインストールすると便利（後述）
 
* [GNU ARM Embedded Toolchain](https://launchpad.net/gcc-arm-embedded) 
* OpenOCD(Homebrewからインストール)

* [TOPPERS/ASP 個別パッケージ](http://www.toppers.jp/asp-d-download.html)
    * [ターゲット非依存部 asp-1.9.2.tar.gz](http://www.toppers.jp/download.cgi/asp-1.9.2.tar.gz)
    * [ターゲット依存部 ARM Cortex-M4アーキテクチャ・GCC依存部パッケージ asp_arch_arm_m4_gcc-1.9.3.tar.gz](http://www.toppers.jp/download.cgi/asp_arch_arm_m4_gcc-1.9.3.tar.gz)
* [ST-LINKのファームウェアアップデートツール](http://www.st.com/ja/embedded-software/stsw-link007.html)


## ST-LINKのアップデートの確認
まず最初にST-LINKのアップデートの確認を行っておきましょう。
上記リンク先にあるソフトウェアSTSW-LINK007をダウンロードして実行してください。
（アップデートされていない場合はプログラムのダウンロードができません）
TODO:詳しい方法を書く

## GNU ARM Eclipseのインストール
Eclipse CDTを起動します。
Help -> EclipseMarketPlace... をクリックすると以下のような画面が表示されます。
探すのが大変なので、Find のところに "GNU ARM" ぐらい入れると見つかるでしょう。
右下の方にあるInstallをクリックするとインストールが始まります。

<img width="549" alt="Eclipse Marketprace-GNU ARM Eclipse.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/93ece0e6-bb32-d90f-046d-a2484cc5e565.png">


## TOPPERSの構築
簡易パッケージもあるのですが、こちらはWindows用に作成されているようだったので、個別パッケージから作成することにしました。

### 個別パッケージからASPを作成する
ターゲット非依存部、ターゲット依存部それぞれ解凍します。
（ダブルクリックで展開するとどちらもaspという名前になるので注意）
ターゲット非依存部にターゲット依存部を上書きします。

<img width="768" alt="スクリーンショット 2016-12-21 12.18.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/a9d4a2d8-5d62-d81c-6d5d-078ec9e29787.png">

aspディレクトリの配下は上記のような感じ。toolsディレクトリが作成されていればOK。

### cfgの追加
Macの場合、cfgを別途もってくる必要があります

[http://toppers.jp/download.cgi/cfg-osx-static-1_9_5.tar.gz](http://toppers.jp/download.cgi/cfg-osx-static-1_9_5.tar.gz)

解凍してでてきたcfgファイルを
asp/cfg/cfg ディレクトリを作成し、その中に置きます。
```asp/cfg/cfg/cfg``` (3つのcfgのうち、前2つがディレクトリで3つめがファイル)
のような感じになります。

### eclipseのワークスペース & プロジェクトの作成
ここでは私の方で用意したプロジェクトを使用します。
githubには置いた都合上、名前が冗長になっているので「eclipsews」という名前でtoolsディレクトリ内にcloneします。（以下の画像を参考にしてください）
<img width="635" alt="スクリーンショット 2016-12-21 12.25.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/55cbd31e-5f21-9dcc-bb86-c07fb927b3ae.png">


(コマンドをコピーしたいときは↓を使用してください)

```
git clone git@github.com:yurie/eclipsews-asp-nucleof401re.git eclipsews
```

### 動作確認
ここで一度コマンドラインからビルドしてみましょう。

```
$ cd eclipsews/stm32f401nucleo/
$ make
```

asp.elfができたらOKです。[^fn1]

確認できたらcleanしておきましょう

```
$ make clean
```


### eclipseから起動する

ワークスペースはeclipsewsを選択します。
<img width="531" alt="eclipsewsの場所.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/7923587f-3482-bab2-f947-b44ad90331bf.png">

以下、私の環境の都合上、英語版lunaでのキャプチャになっています。

ワークスペースは真っ白なので、プロジェクトをインポートします。
プロジェクトエクスプローラ内で右クリックすると以下のようなメニューが出てくるのでimportを選択してください。
<img width="312" alt="スクリーンショット 2016-12-21 12.59.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/5d602cff-878a-702a-4a4c-6c1e5ae91a28.png">

メニューからGeneral->Existing Projects into Workspaceを選択します。
<img width="504" alt="スクリーンショット 2016-12-21 13.00.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/86e205b5-78e1-a32c-e8b3-34a1433e3e79.png">

先ほど作成したasp/tools/wclipsewsを選択するとProjectsにstm32f401nucleoが出てくるのでそれを選択してfinishしてください。
<img width="507" alt="スクリーンショット 2016-12-21 13.01.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/172a2c53-0e2e-1088-1f6a-798efe575785.png">

stm32f401nucleoプロジェクトが出てきましたね！

### gccのパスの設定
プロジェクトのプロパティを開きます。
C/C++ Build -> Environmentタブを表示してPATHにgccのパスをいれてください。

<img width="788" alt="スクリーンショット 2016-12-21 13.17.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/53b0f8c4-72a4-2d65-509b-b85acab3cbb6.png">

PATHの行を選択してEditボタンをクリックして表示される以下の画面で「/usr/local/gcc-arm-none-eabi-4_9-2014q4/bin」のところをご自身の環境に合わせて変えてください。
<img width="629" alt="スクリーンショット 2016-12-21 13.20.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/b5e87692-8bbf-48de-b8cd-0f31510c9509.png">


それではさっそくビルドしてみましょう。
メニューのBuild->BuildProjectもしくはプロジェクトを選択して右クリックで表示されるメニューからBuildProjectを選択します。

### OpenOCDのパスの設定
Eclipseメニューの Eclipse -> 環境設定 
Preferences 画面の左側のメニューからRun/Debug -> OpenOCDを選択します。
Folder: のところにOpenOCDをインストールしたパスを入れてください。
以下の画像はHomebrewからインストールしたバージョン0.9.0を選択した例です。
（Browseボタンから選択するのがよいでしょう）

<img width="803" alt="prefarence-OpenOCD.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/68f6b9a7-1999-80b0-f226-d542873b4396.png">

### Debugの設定

というか、ボードにプログラムをダウンロードします。
debug(虫のアイコン) -> Debug Configurations... から作成します。
<img width="252" alt="スクリーンショット 2016-12-21 17.49.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/5a705fbb-668c-c443-6a4e-c1ce5183b73c.png">


<img width="796" alt="スクリーンショット 2016-12-21 17.51.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/45a9bd18-653d-69d7-a8ec-d7398a226263.png">

GDB OpenOCD Debugging を選択して新規作成します。[^fn2]

MainタブはProjectとC/C++Applicationを設定
<img width="583" alt="スクリーンショット 2016-12-21 17.54.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/03d650d2-631f-86ec-48fe-7137233e642f.png">

Debuggerタブの設定
Config options: に -fオプションで```stlink-v2.cfg``` と ```st_nucleo_f4.cfg``` の場所を指定します。
Homebrewでインストールしたらおそらく以下の場所にあるでしょう

```
-f "${openocd_path}/../share/openocd/scripts/interface/stlink-v2.cfg" -f "${openocd_path}/../share/openocd/scripts/board/st_nucleo_f4.cfg"
```
GDB Client Setup のExecutableに使用するarm-none-eabi-gdbのパスを設定します。

<img width="674" alt="スクリーンショット 2016-12-21 18.18.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/f00553da-946b-59f2-f74b-3392bd3ea3ae.png">

Startup タプの設定
Initialization Commands のテキスト欄に以下の文字列をコピーします。

```
set remotetimeout 20
monitor reset init
monitor sleep 50
```

下の方（Mackbookだと隠れてるかもしれないので注意）にあるRun/Restart Commandsの Set breakpoint at: の値をtaskにします[^fn3]

<img width="675" alt="スクリーンショット 2016-12-21 18.24.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/79017f09-f0c1-3cd2-c072-5930d1aa0949.png">

一画面で撮れなかったので↑の画面の下の方です。
<img width="672" alt="スクリーンショット 2016-12-21 18.18.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/566de51e-cc9a-9ede-219d-205f59fe50ce.png">

### ボードにダウンロードする

上記の設定ができたらDebugから実行してみましょう。



コンソールのGDBのタブに以下のように表示されたらOKです。
現状ではデバッグはできないので(ごめんなさい)ここで終了しましょう。

<img width="713" alt="スクリーンショット 2016-12-21 18.10.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/c0f9a02d-6606-0e93-d193-518c695c0345.png">

## コンソールから実行する
ダウンロードしたプログラムをシリアル経由で操作してみます。

### minicomの設定

Serial Device にボードが使用しているUSBポートを設定します
Serial Device : /dev/tty.usbmodem1413(私の場合)
ボーレートは115200その他デフォルト設定のままで大丈夫な感じでした。

minicomを起動してボードのリセットボタン（黒い方）を押すと以下のように表示されます。
見慣れた？表示がでてきましたね。
入力もできますので、コマンドを入力してみてください。
（コマンドの説明はsample1.c内のコメント文を参照してください）

<img width="563" alt="スクリーンショット 2016-12-21 18.54.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/61488/75592437-c34c-7430-f66e-7e4bd88d64e5.png">




[^fn1]: ここで確認しておくと、Eclisepの設定が悪いのかASPの方が間違ってるのかの切り分けがしやすいので

[^fn2]: メニューにない！という場合はGNU ARM Eclipseがインストールされていない可能性が高いです。もう一度確認してください

[^fn3]: TOPPERSはmainがないのでmain相当の場所にしました