2018年8月26日日曜日

NucleoF446REでmbed-cliを使う。(メモ)

だいぶ前になりますが、以下のサイトを参考にしてmbed-cliの環境を構築しました。(Windows10)

オフィシャルのドキュメント
「Github: Arm Mbed Command Line Interface https://github.com/ARMmbed/mbed-cli
「arm MBED https://os.mbed.com/docs/v5.9/tools/installation-and-setup.html

日本語の解説
「Toyomasa Watarai」さんの「mbed オフラインの開発環境
「Yoshihiro TSUBOI」さんの「[lang:ja] mbed CLIをWindowsで使ってみる(環境構築編)
@matsujirushiさんの「Arm Mbed CLIの環境構築 for Windows

WindowsまたはMac OS Xの場合は専用のインストーラーがあるようですが、もろもろのツールを手動インストールしていました。

以下、PowerShellで作業しました。

手動でインストールしたプログラムの確認


Python


PS D:\> python --version
Python 2.7.14

Git

PS D:\> git --version
git version 2.16.2.windows.1

Mercurial

PS D:\> hg --version
Mercurial - 分散構成管理ツール(バージョン 4.6.1)
(詳細は https://mercurial-scm.org を参照)

Copyright (C) 2005-2018 Matt Mackall and others
本製品はフリーソフトウェアです。
頒布条件に関しては同梱されるライセンス条項をお読みください。
市場適合性や特定用途への可否を含め、 本製品は無保証です。

GCC

PS D:\> arm-none-eabi-gcc --version
arm-none-eabi-gcc.exe (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

GCCはGCC 7をインストールしてPATHを通していますが、mbed-cliでcompileするとエラーが出たので、別にインストールしているGCC 6をmbed-cliの環境設定で指定して使用しました(後述)。

エラーメッセージ

PS D:\Users\gizmo\Documents\mbed\mbed-os-example-blinky>  mbed compile -t GCC_ARM -m NUCLEO_F446RE
[Error] @,: Compiler version mismatch: Have 7.3.1; expected version >= 6.0.0 and < 7.0.0

mbed-cliのアップデート

PS D:\Users\gizmo\Documents\mbed> pip install -U mbed-cli
Collecting mbed-cli
  Downloading https://files.pythonhosted.org/packages/dc/42/8c4d0ac81a063074a62143aeb136035c9d80517bdaf611603fefe2b67856/mbed_cli-1.7.5-py2-none-any.whl (47kB)
    100% |################################| 51kB 1.2MB/s
Installing collected packages: mbed-cli
  Found existing installation: mbed-cli 1.7.3
    Uninstalling mbed-cli-1.7.3:
      Successfully uninstalled mbed-cli-1.7.3
Successfully installed mbed-cli-1.7.5
You are using pip version 9.0.1, however version 18.0 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

mbed-cliを新規インストールする場合は
pip install mbed-cli
とUpdateするオプションの「-U」を省いてやればだいじょうぶだと思います。

念の為ですが、パスの「gizmo」はWindowsのUser名で「D:\Users\gizmo\Documents\mbed\」をmbedの作業フォルダとしています。

mbed-cliはPythonスクリプトでPythonのインストール・フォルダ下にあります。
C:\Python27\Scripts

Exampleのインポート


まずはLチカです。mbed-os-example-blinkyをインポートしました。

インポートにまずまず時間はかかりますが、インポート完了時に反応がないので適当にEnterキーを押します。

PS D:\Users\gizmo\Documents\mbed> mbed import mbed-os-example-blinky
[mbed] Importing program "mbed-os-example-blinky" from "https://github.com/ARMmbed/mbed-os-example-blinky" at latest revision in the current branch
[mbed] Adding library "mbed-os" from "https://github.com/ARMmbed/mbed-os" at rev #f8b140f8d7cb

インポートしたフォルダのサイズ:695MB

環境変数の設定

前述の通り、mbed-cliの環境設定でGCC 6のパスを指定します。

PS D:\Users\gizmo\Documents\mbed\mbed-os-example-blinky> mbed config -G GCC_ARM_PATH "D:\GNU Tools ARM Embedded\6.2 2016q4\bin"
[mbed] D:\GNU Tools ARM Embedded\6.2 2016q4\bin now set as global GCC_ARM_PATH

mbed-cliの設定の確認

PS D:\Users\gizmo\Documents\mbed\mbed-os-example-blinky> mbed config --list
[mbed] Global config:
GCC_ARM_PATH=D:\GNU Tools ARM Embedded\6.2 2016q4\bin

[mbed] Local config (D:\Users\gizmo\Documents\mbed\mbed-os-example-blinky):
No local configuration is set

パソコンに繋がっているmbedボードの検出

mbedボード(今回はNucleo F446RE)をUSBでパソコンに繋ぎ、確認します。

PS D:\Users\gizmo\Documents\mbed\mbed-os-example-blinky> mbed detect

[mbed] Detected NUCLEO_F446RE, port COM4, mounted I:, interface version 0221:
[mbed] Supported toolchains for NUCLEO_F446RE
+---------------+-----------+-----------+-----------+-----------+-----------+
| Target        | mbed OS 2 | mbed OS 5 |    ARM    |  GCC_ARM  |    IAR    |
+---------------+-----------+-----------+-----------+-----------+-----------+
| NUCLEO_F446RE | Supported | Supported | Supported | Supported | Supported |
+---------------+-----------+-----------+-----------+-----------+-----------+
Supported targets: 1
Supported toolchains: 3

コンパイル


PS D:\Users\gizmo\Documents\mbed\mbed-os-example-blinky> mbed compile -t GCC_ARM -m NUCLEO_F446RE
Building project mbed-os-example-blinky (NUCLEO_F446RE, GCC_ARM)
Scan: .
Scan: mbed
Scan: env
Compile [  0.2%]: mbed_tz_context.c
<中略>
Compile [100.0%]: test_env.cpp
Link: mbed-os-example-blinky
Elf2Bin: mbed-os-example-blinky
+------------------+-------+-------+------+
| Module           | .text | .data | .bss |
+------------------+-------+-------+------+
| [fill]           |   119 |     4 |   14 |
| [lib]\c.a        | 24641 |  2472 |   56 |
| [lib]\gcc.a      |  3168 |     0 |    0 |
| [lib]\misc       |   252 |    16 |   28 |
| main.o           |    68 |     4 |   28 |
| mbed-os\drivers  |   192 |     4 |  100 |
| mbed-os\hal      |  1653 |     4 |   68 |
| mbed-os\platform |  2764 |   260 |  133 |
| mbed-os\rtos     |  8498 |   168 | 6073 |
| mbed-os\targets  |  8583 |     4 |  552 |
| Subtotals        | 49938 |  2936 | 7052 |
+------------------+-------+-------+------+
Total Static RAM memory (data + bss): 9988 bytes
Total Flash memory (text + data): 52874 bytes

Image: .\BUILD\NUCLEO_F446RE\GCC_ARM\mbed-os-example-blinky.bin

出来上がった「.\BUILD\NUCLEO_F446RE\GCC_ARM\mbed-os-example-blinky.bin」をオンラインコンパイラと同じようにNucleoF446REのフォルダにDrag&Dropすれば実行されます。

<追記:2018.09.20>

コマンドラインに「-f」オプションを付けると、compile後、自動的にパソコンにつないでいるTarget Boardにバイナリが書き込まれます。


> mbed compile -t GCC_ARM -m NUCLEO_F446RE -f

</追記>

プロジェクトの新規作成

Lチカ・プログラムを新規作成します。プログラム名はblink2としてExampleより素早くチカチカするようにしました。

空のプロジェクトを作成します。

PS D:\Users\gizmo\Documents\mbed> mbed new blink2
[mbed] Creating new program "blink2" (git)
[mbed] Adding library "mbed-os" from "https://github.com/ARMmbed/mbed-os" at branch/tag "latest"
[mbed] Updating reference "mbed-os" -> "https://github.com/ARMmbed/mbed-os/#f8b140f8d7cb226e41486c5df66ac4f3ce699219"
The following paths are ignored by one of your .gitignore files:
mbed-os.lib
Use -f if you really want to add them.

環境の確認

作成したプロジェクト・ディレクトリに移動して環境を確認。

PS D:\Users\gizmo\Documents\mbed> cd blink2

PS D:\Users\gizmo\Documents\mbed\blink2> mbed config --list
[mbed] Global config:
GCC_ARM_PATH=D:\GNU Tools ARM Embedded\6.2 2016q4\bin

[mbed] Local config (D:\Users\gizmo\Documents\mbed\blink2):
No local configuration is set

main.cppを作成

#include "mbed.h"

DigitalOut led1(LED1);

// main() runs in its own thread in the OS
int main() {
    while (true) {
        led1 = !led1;
        wait(0.1);
        led1 = !led1;
  wait(0.1);
    }
}

ファイルの確認

PS D:\Users\gizmo\Documents\mbed\blink2> ls


    ディレクトリ: D:\Users\gizmo\Documents\mbed\blink2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018/08/26     14:58                mbed-os
-a----       2018/08/26     14:59              8 .mbed
-a----       2018/08/26     15:00            215 main.cpp
-a----       2018/08/26     14:59             78 mbed-os.lib
-a----       2018/08/26     14:59           1469 mbed_settings.py

コンパイル

PS D:\Users\gizmo\Documents\mbed\blink2> mbed compile -t GCC_ARM -m NUCLEO_F446RE
Building project blink2 (NUCLEO_F446RE, GCC_ARM)
Scan: .
Scan: mbed
Scan: env
Compile [  0.2%]: mbed_tz_context.c
<中略>
Compile [100.0%]: test_env.cpp
Link: blink2
Elf2Bin: blink2
+------------------+-------+-------+------+
| Module           | .text | .data | .bss |
+------------------+-------+-------+------+
| [fill]           |    87 |     4 |   14 |
| [lib]\c.a        | 24641 |  2472 |   56 |
| [lib]\gcc.a      |  3168 |     0 |    0 |
| [lib]\misc       |   252 |    16 |   28 |
| main.o           |   100 |     4 |   28 |
| mbed-os\drivers  |   192 |     4 |  100 |
| mbed-os\hal      |  1653 |     4 |   68 |
| mbed-os\platform |  2764 |   260 |  133 |
| mbed-os\rtos     |  8498 |   168 | 6073 |
| mbed-os\targets  |  8583 |     4 |  552 |
| Subtotals        | 49938 |  2936 | 7052 |
+------------------+-------+-------+------+
Total Static RAM memory (data + bss): 9988 bytes
Total Flash memory (text + data): 52874 bytes

Image: .\BUILD\NUCLEO_F446RE\GCC_ARM\blink2.bin

出来上がった「.\BUILD\NUCLEO_F446RE\GCC_ARM\blink2.bin」をDrag&Dropです。

複数のプロジェクトを管理

下記のドキュメントを参考にすれば、mbed-osをダウンロードする時間とディスクスペースを節約できそうです。

Managing multiple Mbed projects

0 件のコメント:

コメントを投稿