【Zephyr編】micro:bitで本格的な組込みソフトウェア開発
BBC micro:bit は、様々な方法で、組込みソフトウェア開発が可能です。
本記事では、リアルタイムオペレーティングシステムの実装である Zephyr を使って、本格的な組込みソフトウェア開発環境を構築し、VSCodeでサンプルプログラムをデバッグ実行します。
Windows 10 (64bit版) 上での開発環境構築
次のドキュメントを参考にして、Windows 10 (64bit版) 上に開発環境を構築します。
Getting Started Guide
https://docs.zephyrproject.org/latest/getting_started/index.html
本記事では、具体的なダウンロード元やインストールフォルダを示していますので、将来、バージョンアップなどにより、動作しなくなる可能性があります(2020/07/10現在)。
Getting Started Guide
(1) Windows Update の実施
[スタート]-[設定]-[更新とセキュリティ]-[Windows Update] で、更新プログラムのチェックをし、必要に応じて、ダウンロードをインストールを実施します。
(2) Chocolateyと依存パッケージのインストール
次のファイルをダウンロードし、c:\temp\install.ps1として保存します。
https://chocolatey.org/install.ps1 ←右クリックで「名前を付けてリンク先を保存」
コマンドプロンプトを管理者として実行し、次のコマンドで、ダウンロードしたinstall.ps1を実行します。
PowerShell -ExecutionPolicy RemoteSigned c:\temp\install.ps1
新たに、コマンドプロンプトを管理者として実行し、次のコマンドで、依存パッケージをインストールします。
choco feature enable -n allowGlobalConfirmation
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System'
choco install ninja gperf python git
一旦、Windows 10を再起動します。
(3) Zephyrの取得とPython関連パッケージのインストール
コマンドプロンプトを開き(通常)、次のコマンドで、C:\zephyr 開発用ディレクトリとPython仮想環境を作成します。
cd c:\
mkdir zephyr
cd zephyr
pip install virtualenv
virtualenv venv
c:\zephyr\venv\scripts\activate
pip install west
続けて、次のコマンドで、Zephyrの取得とPython関連パッケージをインストールします。
cd c:\zephyr
west init zephyrproject
cd zephyrproject
west update
west zephyr-export
pip install -r c:\zephyr\zephyrproject\zephyr\scripts\requirements.txt
(4) Toolchainのインストールと環境変数の設定
gcc-arm-none-eabi-7-2018-q2-update-win32.exeをダウンロードし、インストールします。
※インストール先のフォルダ名にはスペースを含めないようにします。
例えば、C:\GNUToolsArmEmbedded2018-q2-updateへインストールします。
``
次の2つの環境変数を設定します。
| # | 環境変数 | 値 | 
|---|---|---|
| 1 | ZEPHYR_TOOLCHAIN_VARIANT | gnuarmemb | 
| 2 | GNUARMEMB_TOOLCHAIN_PATH | C:\GNUToolsArmEmbedded2018-q2-update | 
※ 環境変数は、[スタートボタン]の右クリック-[システム]-[システム情報]-[システムの詳細設定]で、「環境編巣(N)...]ボタンを押下して、「新規(N)...」または「新規(W)...」で、ユーザー環境変数またはシステム環境変数として、追加設定します。
(5) BBC micro:bit サンプルプログラム
コマンドプロンプトを起動し、次のコマンドで、サンプルプログラムのビルドを実行します。
c:\zephyr\venv\scripts\activate
cd c:\zephyr\zephyrproject\zephyr\
west build -p auto -b bbc_microbit samples\boards\bbc_microbit\display
(6) BBC micro:bit 本体への書き込み
ビルドが完了したら、BBC micro:bit 本体とパソコンをUSB通信ケーブルで接続し、次のコマンドで本体へ書き込みます。
west flash
※ 本体への書き込みができない場合、BBC micro:bit のファームウェアの最新化を行ってください。
VSCodeを用いた開発環境の構築
Visual Studio Code (VSCode)を用いたに開発環境を構築します。
VSCodeのインストール
https://code.visualstudio.com/Download のページから、Windows版のVSCodeをダウンロードし、インストールします。
VSCode拡張機能のインストール
VSCodeを起動し、次の2つの拡張機能をインストールします。
- C/C++ 拡張機能(Microsoft)
- Native Debug 拡張機能(webfreak)
C/C++ 拡張機能 のインストール
- 
Ctrl-Pを押下し、VSCodeの検索ボックスを開きます。
- 検索ボックスにext install cpptoolsと入力し、Enterキーを押下します。
- リストのトップに拡張機能のC/C++が表示されますので、インストールボタンでインストールします。
Native Debugger 拡張機能 のインストール
- 
Ctrl-Pを押下し、VSCodeの検索ボックスを開きます。
- 検索ボックスにext install webfreak.debugと入力し、Enterキーを押下します。
- リストのトップに拡張機能のNative Debugが表示されますので、インストールボタンでインストールします。
ワークスペースの関連付け
エクスプローラーでC:\zephyrフォルダーを開き、ファイル名やフォルダ名以外の空白の部分で、右クリックし、`Code で開く'で、VSCodeで開きます。
デバッグ環境構成の定義(GDB)
VScodeのメニューから[実行(Debug)]-[構成を開く(Open Configuration)]を選択し、環境の選択の中からGDBを選択します。launch.jsonファイルが追加され、テキストエディタに表示されますので、次の内容で上書き保存します。
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gdb_zephyr",
            "type": "gdb",
            "request": "attach",
            "executable": "${workspaceRoot}\\zephyrproject\\zephyr\\build\\zephyr\\zephyr.elf",
            "target": ":3333",
            "cwd": "${workspaceRoot}",
            "gdbpath": "C:\\GNUToolsArmEmbedded2018-q2-update\\bin\\arm-none-eabi-gdb.exe",
            "remote": true,
            "autorun": [
                "monitor reset"
                ],
        }
    ]
}
サンプルプログラムのデバッグ
サンプルプログラムをステップ実行でデバッグしてみます。
ブレークポイントの追加
zephyrproject\zephyr\samples\boards\bbc_microbit\display\src\main.cを開き、行番号の左で、ブレークポイントを追加・削除できます。
GDBサーバーの開始
Ctrl-@キーを押下し、ターミナルを開きます。次のコマンドを実行し、GDBサーバーを起動します。
コマンドプロンプトを起動し、次のコマンドを実行し、GDBサーバーを起動します。
c:\zephyr\venv\scripts\activate
cd c:\zephyr\zephyrproject\zephyr\
west debugserver
デバッグ実行の開始
次の手順で、デバッグ実行を開始します。
- 
Ctrl-Shift-Dキーを押下し、左縦のアクティビティバーから「実行(Debug)」アイコンを選択し、左側のペインを切り替えます。
- 「実行(Debug)」ドロップダウンリストで、gdb_zephyrを選択します。
- 「実行(Debug)」横の緑色の「デバッグの開始」ボタンをクリックするとGDBセッションが開始されます。
- すぐさま、デバッグが開始され、ブレークポイントで、一時停止します。
- 「続行(F5)」で、処理が続行され、次のブレークポイントで一時停止します。
VSCodeのタスク
バッチファイル
C:\zephyrフォルダーに次の3つのバッチファイルを作成します。
call .\venv\scripts\activate.bat
cd .\zephyrproject\zephyr\
west build -p auto -b bbc_microbit %1
call .\venv\scripts\activate.bat
cd .\zephyrproject\zephyr\
west flash
call .\venv\scripts\activate.bat
cd .\zephyrproject\zephyr\
west debugserver
tasks.jsonの追加
次の手順で、tasks.jsonファイルを追加します。
- Ctrl-Shift-Pキーを押下し、表示された検索ボックスで、tasksと入力すると候補が絞り込まれますので、タスク: タスクの構成 / Tasks:Configure Taskを選択します。
- テンプレートからtasks.jsonを作成をクリックし、リスト末尾のOthersをクリックします。
- tasks.jsonファイルが追加され、エディタに表示されます。
tasks.jsonの内容を次の定義内容で上書き保存します。
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build_zephyr",
            "type": "process",
            "command": "build.bat",
            "group":{
                "kind": "build",
                "isDefault": true
            },
            "args": [
                "samples\\boards\\bbc_microbit\\display"
            ]
        },
        {
            "label": "flash_zephyr",
            "type": "process",
            "command": "flash.bat",
            "dependsOn": [
                "build_zephyr"
            ]
        },
        {
            "label": "debug_zephyr",
            "type": "process",
            "command": "debug.bat",
        }
    ]
}
タスクの実行方法
例えば、debug_zephyrタスクを実行するには、次の手順で操作します(他のタスクも同様)。
- Ctrl-Shift-Pキーを押下し、検索ボックスを開きます。
- tasksと入力すると、候補が絞り込まれますので、タスク: タスクの実行 / Tasks: Run Taskをクリックします。
- 
debug_zephyrが実行するタスクの選択候補に表示されますので、それをクリックします。
- 下段のペインで、`debug.bat'が実行されます。
尚、build_zephyrタスクに関しては、その定義でgroupが指定されていますので、Ctrl-Shift-Bキーで、実行できます。
まとめ
micro:bitで本格的な組込みソフトウェア開発ができることを確認しました。
- リアルタイムオペレーティングシステムの実装であるZephyr を使いました。
- C/C++による本格的な組込みソフトウェア開発環境を構築しました。
- サンプルプログラムのLチカをmicro:bit本体で動作させました。
- VSCodeでサンプルプログラムをデバッグ実行し、ステップ実行できることを確認しました。
- westコマンドをVSCodeのタスクとして実行できるようにしました。