IAR EWARM 8.30 で CMSIS Pack を使う際の落とし穴

# これは何？

[IAR EWARM](https://www.iar.com/jp/iar-embedded-workbench/) 8.30 で [CMSIS Pack](https://www.keil.com/dd2/pack/) を使ったプロジェクトを作成するときに嵌まった落とし穴と、その回避策について述べます。

## 想定読者

- IAR EWARM 8.30 を使いたい人。
- ローカルで CMSIS Pack をインストールし、そのパックを使用したプロジェクトを作成したい人
- プロジェクトを作成する場合、空のプロジェクト から作りたい人

# 結論

- ワークスペース(.eww)を作成したディレクトリと親子(孫含む)にプロジェクト(.ewp)を作成しない
- ローカルから CMSIS Pack を使用する場合、同じ CMSIS Pack を2回インストールする

# IAR EWARM 8.30 になって CMSIS Pack Manager が刷新した

- CMSIS Pack Manager は独立したプロセスで、 Eclipse そのものです(推測)。こいつを起動するために、 workspace(=Eclipse のワークスペースです) の保存が必要。おそらく [cmsis-pack-eclise](https://github.com/ARM-software/cmsis-pack-eclipse)を使ってると思う。
- プロジェクト(.ewp)ファイルは ワークスペースと異なるディレクトリに保存しないとNG。同じところに保存しようとすると、怒られます。
- プロキシ設定できるようになった！

# 空の新規プロジェクトを作成する手順

- メニューから、新規プロジェクトの作成を選びます。

    <img src="https://qiita-image-store.s3.amazonaws.com/0/225846/df77834a-902d-c85a-865c-57ce68f6aa8d.png" width=30%>

- 空のCMSISPackプロジェクトを選びます。

    <img src="https://qiita-image-store.s3.amazonaws.com/0/225846/cd8aad70-9eeb-4985-519b-bd1a33c0025c.png" width=50%>

- ワークスペースの保存場所を決める

    ワークスペース(.eww)の保存を求められます。過去のバージョンと振る舞いが変わっていて、面食らいますが適当な場所に保存しましょう。其処に、 Eclipse の workspace が構築されます。

- プロジェクトの保存先を決める

    続いてプロジェクト(.ewp)の保存先を聞かれます。
    ワークスペースと同じ場所を選ぶと怒られます。他の場所にしなければ成りません。
    ここに罠があります。

## プロジェクトの保存先の罠

.eww と .ewp を同じディレクトリに作成使用とすると、 EWARM 側に怒られます。まぁ、これはツールが禁止するので OK です。

そうなると、次のように .eww の直下に ディレクトリを作成して其処に保存したくなります。

```terminal
workspace/
|- hoge.eww
`- project/
   `- fuga.ewp
```

これ、ツールに怒られませんが、だめです。
空のプロジェクトを作成する場合は止めましょう。 CMSIS Pack Manager が `Invalid project description.` とのエラーを吐き出して、デバイスの選択ができなくなります。 EWARM 側はこのエラーを補足できず、変な状態になります。
![error.png](https://qiita-image-store.s3.amazonaws.com/0/225846/1528ab99-4de9-4ca1-4fee-0945d65600a3.png)


直下だめなら、上にするか、というのを次にやりました。
次のように、 .ewp を一階層上に保存する。

```terminal
project/
|- fuga.wep
`- workspace/
   `- hoge.eww
```

だめです。先ほどと同じように CMSIS Pack Manager が `Invalid project description.` とのエラーを吐き出して、デバイスの選択ができなくなります。 

Eclipse だと workspace と project に同じ名前のものが存在していると発生する類いのものらしいです。今回は、名前が違いますが、これに陥ります。 私は Eclipse が嫌いですが、これでより一層嫌いになりましたよ。。。

で、結論に書いたように、次のように独立した場所にプロジェクト(.ewp)を保存すると CMSIS Pack Manager がエラーを出さなくなります。


```terminal
../
|- workspace/
|  `- hoge.eww
`- project/
   `- fuga.wep
```

なんだか雑然としてしまって嫌ですが諦めましょう。

ちなみに、 CMSIS Pack の example からプロジェクトを作成する場合は、 workspace 直下に project が作成されます。なんでだよー、と思いますが次のバージョンアップで直ると期待。

# ローカルから CMSIS Pack をインストールし、それを使う場合

ARM や TI の CMSIS Pack ファイルは、 CMSIS Pack Manager でダウンロード & インストールできます。しかし、それ以外のベンダの CMSIS Pack を使用する場合、別途ダウンロードし、ローカルから CMSIS Pack をインストールすることになります。

例として [CMSIS Pack](https://www.keil.com/dd2/pack/) site から Mediatek の DFP(CMSIS Pack) を入れる方法を説明します。

1. CMSIS Pack ファイルをダウンロードし、適当なディレクトリに置いておきます。
2. IAR の CMSIS Pack Manager のメニューから `CMSIS Manager` -> `Import Existing Packs` を選択します。
3. ファイル選択ダイアログボックスで、先ほどダウンロードしたファイルを選択します。

しばらく時間がたった後、 Pack の install が成功したかのようなログが見えます。しかし、騙されてはいけません。
![unknown.png](https://qiita-image-store.s3.amazonaws.com/0/225846/79d3d9b7-bca9-b5d4-8354-bddcb5ccace5.png)

実は、 Pack の install は不完全です。これが原因で CMSIS Pack プロジェクトでデバイスの選択に失敗することになります。

もう一度、同じ Pack ファイルをインストールしてください。二回目は、上書きするかと聞かれますので、上書きしてください。すると、先ほどと異なり、ログが増えます。

![complete.png](https://qiita-image-store.s3.amazonaws.com/0/225846/20532bb3-1020-1c2d-c7d6-9f9739b988bd.png)

エラーが出ていますが、日本語環境の文字コードに対するエラーなので、無視してOKです。肝心なのは、 `Pack has been converted` があること。 IAR EWARM 向けの変換プロセスが動作したのが読み取れます。

このように、2回同じ pack ファイルを install すると、下記のように追加されたデバイスを選んでもエラーが出なくなります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/225846/b9d92a8b-3791-21a0-86e1-dc9e5411a1c0.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/225846/a1dc7b27-c3d9-02cd-0d09-3fad27c9d3f1.png)

そして、下記のようにデバイスに関連する コンポーネントを選択するメニューが出るようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/225846/8cbd6360-498b-7194-0c94-d0dacbcb744b.png)

大切なので、もう一度言います。
ローカルから CMSIS Pack をインストールする場合は、二回インストールすると OK です！