Mbed 2のターゲットをMDK-ARMでビルドする

この記事は、Mbed 2の古いターゲットをMDK-ARM（uVision IDE）でビルドする方法説明します。この手順は、2020年3月24日に確認したものです。

## 事前準備

以下のソフトウェアをインストールします。

* MDK-ARM 5.29.0.0
* Mbed-CLI 1.10.1
* python 2.7.15

## オンラインコンパイラからプロジェクトをエクスポートする

オンラインコンパイラのプロジェクトを選択し、右クリックして [Export Program...] を選択します。

<img width="400" alt="export.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/678c547e-fea2-22bd-25e5-7b754e3f08d8.png">

Export Toolchain は、[ZIP Archive] を選択し、[EXPORT] ボタンを押します。

<img width="400" alt="ezip.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/56136e40-711a-a46c-0a0f-a6c67e7e84dc.png">

## uvisionプロジェクトを生成する

ダウンローされたZIPアーカイブを展開します。コマンドプロンプトやPowerShellを開き、アーカイブを展開したディレクトリに移動します。

以下のコマンドで、必要なファイルをダウンロードします。

```shell
mbed deploy
```

なぜか途中で固まるので（原因は不明）、途中で処理を中止して再度実行します。

```
PS X:\LPC1114_blinky> mbed deploy                                                                                       [mbed] Working path "X:\LPC1114_blinky" (program)
[mbed] WARNING: Program "LPC1114_blinky" in "X:\LPC1114_blinky" does not use source control management.
       To fix this you should use "mbed new ." in the root of your program.
---
[mbed] Updating library "mbed" to rev #65be27845400
[mbed] Downloading library build "65be27845400" (might take a while)
[mbed] User aborted!
バッチ ジョブを終了しますか (Y/N)? n
PS X:\LPC1114_blinky> mbed deploy                                                                                       [mbed] Working path "X:\LPC1114_blinky" (program)
[mbed] WARNING: Program "LPC1114_blinky" in "X:\LPC1114_blinky" does not use source control management.
       To fix this you should use "mbed new ." in the root of your program.
---
[mbed] Updating library "mbed" to rev #65be27845400
[mbed] Couldn't find build tools in your program. Downloading the mbed 2.0 SDK tools...
[mbed] Updating the mbed 2.0 SDK tools...
PS X:\LPC1114_blinky>
```

`mbed export` コマンドで、uVision（Arm compiler v5）用のプロジェクトファイルを生成します。`-i uvision5`は、Arm compiler v5用のプロジェクトを生成するオプションです。以下のエラーが表示されます。

```
PS X:\LPC1114_blinky> mbed export -m lpc1114 -i uvision5                                                                [mbed] Working path "X:\LPC1114_blinky" (program)
Traceback (most recent call last):
  File "X:\LPC1114_blinky\.temp\tools\project.py", line 423, in <module>
    main()
  File "X:\LPC1114_blinky\.temp\tools\project.py", line 415, in main
    ignore=options.ignore
  File "X:\LPC1114_blinky\.temp\tools\project.py", line 145, in export
    notify.info("Using targets from %s" % targets_json)
AttributeError: 'NoneType' object has no attribute 'info'
[mbed] ERROR: "c:\users\toyom\.pyenv\pyenv-win\versions\2.7.15\python.exe" returned error.
       Code: 1
       Path: "X:\LPC1114_blinky"
       Command: "c:\users\toyom\.pyenv\pyenv-win\versions\2.7.15\python.exe -u X:\LPC1114_blinky\.temp\tools\project.py -i uvision5 -m lpc1114 --profile debug --source ."
       Tip: You could retry the last command with "-v" flag for verbose output
---
```

メッセージ表示に関連する部分のエラーなので、とりあえず無視することにします。エラーが出ている`project.py`の145行目をコメントアウトします。

![comment_out.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75582/f9fdb74b-28ae-d1b9-4e8c-a7f5326710d0.png)

再度`mbed export`コマンドを実行します。

```
PS X:\LPC1114_blinky> mbed export -m lpc1114 -i uvision5
[mbed] Working path "X:\LPC1114_blinky" (program)
Scan: LPC1114_blinky
PS X:\LPC1114_blinky>
```

今度はエラーなく実行されました。`LPC1114_blinky.uvprojx` ファイルが生成されているのを確認します。

```
PS X:\LPC1114_blinky> dir *.uv*

    ディレクトリ: X:\LPC1114_blinky


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2020/03/24     11:52            823 LPC1114_blinky.uvoptx
-a----       2020/03/24     11:52          63275 LPC1114_blinky.uvprojx
```


## ビルドする

`LPC1114_blinky.uvprojx` をダブルクリックで開き、ビルドします。


以上です。