1. はじめに
このページでは、Microsoft社が提供するVisual Studio Code(以下VS Code)及びその拡張機能 Spresense VSCode IDE を使ってSpresense SDKのアプリケーションを開発するための手順を解説しています。
Spresense VSCode IDE は Spresense SDK のアプリケーション開発に特化した VS Code の拡張機能です。この拡張機能では次のような機能が追加され、プロジェクトの作成からICEデバッグまで統一されたインタフェースで開発を支援します。
-
アプリケーションをビルド・デバッグするための設定の自動作成
-
マルチコアを含むアプリケーションのひな形の作成
-
GUIによるビルドのコンフィグレーション
-
Spresenseの動作を確認するシリアルターミナル
以上の機能を使い、ここでは myproject
というプロジェクトに簡単なサンプルアプリケーション myapps
を追加する例を使って、アプリケーションを Spresense で動かすまでの手順を解説します。
2. Spresense VSCode IDE のセットアップ
ここでは以下の手順でSpresense SDKのアプリケーション開発環境をインストールします。これによりVS Code上でプロジェクトの作成からデバッグまでの一連の開発環境が整います。
既に Spresense SDK スタートガイド (CLI 版) を参考にCUIによる開発環境を整えている方は 開発ツールのセットアップ を再度実施頂く必要はありません。 |
2.1. 開発ツールのセットアップ
Spresense SDK はLinux/Windows/macOSで開発を行うことができます。
ユーザーが使用する環境に応じて以下のセットアップを行ってください。
サポートされているオペレーティングシステム
-
Linux (64bit)
-
Ubuntu 16.04以降
-
-
Windows (64bit)
-
10 (MSYS2)
-
11 (WSL2)
-
-
macOS
-
High Sierra (10.13)以降
-
32bit版 OS には対応していません。 |
2.1.1. Linux向けセットアップ
-
シリアル通信の設定
以下のコマンドを実行し、使用するユーザーを
dialout
グループに追加します。sudo usermod -a -G dialout <user-name>
コマンドを実行した後、再起動してください。再起動するまで設定は有効になりません。
-
ビルドに必要なツールをインストールします。ターミナルを起動し、以下のコマンドを実行します。
wget https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh bash install-tools.sh
wget や install-tools.sh をプロキシ環境下で実行する場合は、事前にお使いのプロキシサーバーを設定してください。
export http_proxy=http://プロキシーサーバー名:ポート番号 export https_proxy=http://プロキシーサーバー名:ポート番号
SDKv2.3, v3.0リリースにて、GNU Arm Embedded Toolchain (コンパイラ) のバージョンを更新しています。
SDK version GNU Arm Toolchain version SDKv3.0以降
gcc-arm-none-eabi-10.3-2021.10
SDKv2.3以降
gcc-arm-none-eabi-9-2019-q4-major
SDKv2.2以前
gcc-arm-none-eabi-7-2018-q2-update
コンパイラの更新を含めて再インストールを行う場合は、最新の
install-tools.sh
を取得し-r
オプションを付与してinstall-tools.sh
を実行してください。bash install-tools.sh -r
既にインストール済みのコンパイラバージョンを確認するには、
source ~/spresenseenv/setup
を実行した後にarm-none-eabi-gcc -v
を実行してください。最終行にバージョン情報が表示されます。arm-none-eabi-gcc -v (snip) gcc version 10.3.1 20210824 (release) (GNU Arm Embedded Toolchain 10.3-2021.10)
インストールしたツールを使用可能にするために、以下のコマンドを実行します。
source ~/spresenseenv/setup
このコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の
.bashrc
に上記コマンドを追加してください。ツールチェーンはホームディレクトリ以下の spresenseenv/usr/bin
にインストールされます。 -
Spresense SDK リポジトリからソースコードをダウンロードします。
git clone --recursive https://github.com/sonydevworld/spresense.git
既に git clone
済みの spresense.git リポジトリを更新し、指定バージョンに更新する場合は 指定バージョンのSDKを取得する方法 をご参照ください。
2.1.2. Windows10(MSYS2)向けセットアップ
-
下記のサイトからMSYS2のインストーラをダウンロードし、インストールします。
-
ビルドに必要なツールをインストールします。スタートメニューにある
MSYS2 MSYS
を起動し、以下のコマンドを実行します。一緒にインストールされる MSYS2 MinGW 64-bit
など他のターミナルを使用するとエラーが発生し正しくビルドできません。curl -L https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh > install-tools.sh bash install-tools.sh
curl や install-tools.sh をプロキシ環境下で実行する場合は、事前にお使いのプロキシサーバーを設定してください。
export http_proxy=http://プロキシーサーバー名:ポート番号 export https_proxy=http://プロキシーサーバー名:ポート番号
SDKv2.3, v3.0リリースにて、GNU Arm Embedded Toolchain (コンパイラ) のバージョンを更新しています。
SDK version GNU Arm Toolchain version SDKv3.0以降
gcc-arm-none-eabi-10.3-2021.10
SDKv2.3以降
gcc-arm-none-eabi-9-2019-q4-major
SDKv2.2以前
gcc-arm-none-eabi-7-2018-q2-update
コンパイラの更新を含めて再インストールを行う場合は、最新の
install-tools.sh
を取得し-r
オプションを付与してinstall-tools.sh
を実行してください。bash install-tools.sh -r
既にインストール済みのコンパイラバージョンを確認するには、
source ~/spresenseenv/setup
を実行した後にarm-none-eabi-gcc -v
を実行してください。最終行にバージョン情報が表示されます。arm-none-eabi-gcc -v (snip) gcc version 10.3.1 20210824 (release) (GNU Arm Embedded Toolchain 10.3-2021.10)
インストールしたツールを使用可能にするために、以下のコマンドを実行します。
source ~/spresenseenv/setup
このコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の
.bashrc
に上記コマンドを追加してください。ツールチェーンは /opt/spresenseenv/usr/bin
にインストールされます。 -
Spresense SDK リポジトリからソースコードをダウンロードします。
git clone --recursive https://github.com/sonydevworld/spresense.git
既に git clone
済みの spresense.git リポジトリを更新し、指定バージョンに更新する場合は 指定バージョンのSDKを取得する方法 をご参照ください。 -
シリアルドライバのインストール
シリアルドライバのインストールは、Spresense ボードをPCに接続する前に行ってください。 Spresense ボードをUSBシリアルで接続するために、ドライバをインストールする必要があります。下記リンクよりドライバをダウンロードし、インストールしてください。
Windows 10/11 環境にて Silicon Labs の最新ドライバ (v11.2.0) を使用すると、USB の通信にエラーが発生してプログラムの書き込みに失敗することがあります。 上記 URL より v11.1.0 をダウンロードしてお使いください。 |
2.1.3. Windows11(WSL2)向けセットアップ
-
WSL2のインストール
WSL2をまずインストールします。
-
PowerShellを開きます
-
wsl
コマンドを実行してWSL2をインストールします。wsl --install
以下のようなコマンドでWSL2としてインストールするUbuntuのバージョンを指定することができます。(以下のコマンドは Ubuntu 20.04をインストールする場合の例です。)
wsl --install -d Ubuntu-20.04
-
WSL2のインストール後、Windowsのメニューに
Ubuntu
というアプリケーションが追加されるので、そのアプリケーションを開きます。 -
初回起動の場合は以下のようにアカウント作成を求められるので、ユーザ名・パスワードを入力します。
-
アカウントが作成し以下のようにコンソールが開けばWSL2のセットアップ完了です。
-
-
ビルドに必要なツールをインストールします。ターミナルを起動し、以下のコマンドを実行します。
wget https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh bash install-tools.sh
wget や install-tools.sh をプロキシ環境下で実行する場合は、事前にお使いのプロキシサーバーを設定してください。
export http_proxy=http://プロキシーサーバー名:ポート番号 export https_proxy=http://プロキシーサーバー名:ポート番号
SDKv2.3, v3.0リリースにて、GNU Arm Embedded Toolchain (コンパイラ) のバージョンを更新しています。
SDK version GNU Arm Toolchain version SDKv3.0以降
gcc-arm-none-eabi-10.3-2021.10
SDKv2.3以降
gcc-arm-none-eabi-9-2019-q4-major
SDKv2.2以前
gcc-arm-none-eabi-7-2018-q2-update
コンパイラの更新を含めて再インストールを行う場合は、最新の
install-tools.sh
を取得し-r
オプションを付与してinstall-tools.sh
を実行してください。bash install-tools.sh -r
既にインストール済みのコンパイラバージョンを確認するには、
source ~/spresenseenv/setup
を実行した後にarm-none-eabi-gcc -v
を実行してください。最終行にバージョン情報が表示されます。arm-none-eabi-gcc -v (snip) gcc version 10.3.1 20210824 (release) (GNU Arm Embedded Toolchain 10.3-2021.10)
インストールしたツールを使用可能にするために、以下のコマンドを実行します。
source ~/spresenseenv/setup
このコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の
.bashrc
に上記コマンドを追加してください。ツールチェーンはホームディレクトリ以下の spresenseenv/usr/bin
にインストールされます。 -
Spresense SDK リポジトリからソースコードをダウンロードします。
git clone --recursive https://github.com/sonydevworld/spresense.git
既に git clone
済みの spresense.git リポジトリを更新し、指定バージョンに更新する場合は 指定バージョンのSDKを取得する方法 をご参照ください。 -
シリアルドライバのインストール
シリアルドライバのインストールは、Spresense ボードをPCに接続する前に行ってください。 Spresense ボードをUSBシリアルで接続するために、ドライバをインストールする必要があります。下記リンクよりドライバをダウンロードし、インストールしてください。
Windows 10/11 環境にて Silicon Labs の最新ドライバ (v11.2.0) を使用すると、USB の通信にエラーが発生してプログラムの書き込みに失敗することがあります。 上記 URL より v11.1.0 をダウンロードしてお使いください。 |
2.1.4. macOS向けセットアップ
-
Apple社が提供している開発ツールをインストールします。 ターミナルを起動し、以下のコマンドを実行します。
xcode-select --install
-
以下のサイトからPython3のインストーラをダウンロードし、インストールします。
-
wgetをインストールします。(一部のNuttXアプリケーション・ツールをビルドする際に必要になります)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" brew install wget
-
flockをインストールします。(SDKv3.2.0以降のバージョンを使用する際に必要になります)
brew tap discoteq/discoteq brew install flock
-
ビルドに必要なツールをインストールします。ターミナルを起動し、以下のコマンドを実行します。
curl -L https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh > install-tools.sh bash install-tools.sh
curl や install-tools.sh をプロキシ環境下で実行する場合は、事前にお使いのプロキシサーバーを設定してください。
export http_proxy=http://プロキシーサーバー名:ポート番号 export https_proxy=http://プロキシーサーバー名:ポート番号
SDKv2.3, v3.0リリースにて、GNU Arm Embedded Toolchain (コンパイラ) のバージョンを更新しています。
SDK version GNU Arm Toolchain version SDKv3.0以降
gcc-arm-none-eabi-10.3-2021.10
SDKv2.3以降
gcc-arm-none-eabi-9-2019-q4-major
SDKv2.2以前
gcc-arm-none-eabi-7-2018-q2-update
コンパイラの更新を含めて再インストールを行う場合は、最新の
install-tools.sh
を取得し-r
オプションを付与してinstall-tools.sh
を実行してください。bash install-tools.sh -r
既にインストール済みのコンパイラバージョンを確認するには、
source ~/spresenseenv/setup
を実行した後にarm-none-eabi-gcc -v
を実行してください。最終行にバージョン情報が表示されます。arm-none-eabi-gcc -v (snip) gcc version 10.3.1 20210824 (release) (GNU Arm Embedded Toolchain 10.3-2021.10)
インストールしたツールを使用可能にするために、以下のコマンドを実行します。
source ~/spresenseenv/setup
このコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の
.bash_profile
に上記コマンドを追加してください。ツールチェーンはホームディレクトリ以下の spresenseenv/usr/bin
にインストールされます。 -
ターミナルで以下のコマンドを実行し、Spresense SDK リポジトリからソースコードをダウンロードします。
git clone --recursive https://github.com/sonydevworld/spresense.git
既に git clone
済みの spresense.git リポジトリを更新し、指定バージョンに更新する場合は 指定バージョンのSDKを取得する方法 をご参照ください。 -
シリアルドライバのインストール
シリアルドライバのインストールは、Spresense ボードをPCに接続する前に行ってください。 Spresense ボードをUSBシリアルで接続するために、ドライバをインストールする必要があります。下記リンクよりドライバをダウンロードし、インストールしてください。
High Sierra (10.13)以降のmacOSにこのドライバをインストールする場合、インストール中にセキュリティに関する警告が表示されます。 「システム環境設定 > セキュリティ」 メニューを開き、「一般」にある「開発元"Silicon Laboratories Inc"のシステムソフトウェアの読み込みがブロックされました。」と表示されている右にある「許可」ボタンをクリックしてください。この操作が行われない場合、シリアルで接続することができません。
2.1.5. USB シリアルポートの確認方法
Spresense メインボードと PC を USB で接続します。
2.1.5.1. Linux 上でのシリアルポートの確認方法
-
ターミナルを開きます。
-
次のコマンドを入力してください。
dmesg | grep "cp21.*attached" [12220.625979] usb 1-1: cp210x converter now attached to ttyUSB0
-
上記の例では、 ポート名は
/dev/ttyUSB0
になります。
2.2. VSCodeのインストール
-
下記のサイトからVSCodeのインストーラをダウンロードします。
-
ダウンロードしたインストーラを実行します
-
Windowsの場合
-
インストーラ(VSCodeUserSetup.exe)を起動します。
-
ダイアログに従いインストールを進めてください。
-
-
macOSの場合
-
インストールファイル(VSCode-darwin-stable.zip)を解凍します。
-
解凍されたフォルダ
Visual Studio Code.app
をアプリケーション
フォルダに移動します。
-
-
Ubuntuの場合
-
次のコマンドでダウンロードしたファイル(code_1.46.1-xxxx.deb)からインストールします。
$ sudo apt install code_1.46.1-xxxx.deb
-
-
-
インストールしたVS Codeを起動します
2.3. Japanese Language Packのインストール
VS Codeを日本語化するためのパッケージをインストールします。これにより各種メッセージ、メニューが日本語になります。
-
ウィンドウの左側の拡張機能ボタン(下図黄色枠)をクリックし、拡張機能インストール画面を表示します。
-
Search Extensions in Marketplace
のテキストボックスにJapanese
と入力します。 -
Japanese Language Pack for VS Code
がリストに表示されるのでそれをクリックします。 -
ウィンドウ右に詳細が表示されるので
Install
をクリックします。 -
日本語化を有効にするために右下のポップアップの
Yes
をクリックして再起動します。 -
下図のような画面で再起動したら日本語化パッケージのインストールは完了です。
2.4. Spresense 拡張機能のインストール
Spresense Extension αバージョンをインストールしている場合は、アンインストールを行ってください。アンインストールを行わない場合、Spresense 拡張機能が正しく動きません。 |
-
拡張機能画面で
Spresense
を検索します。 -
Spresense VSCode IDE
がリストに表示されるのでそれをクリックします。 -
ウィンドウ右に詳細が表示されるので
Install
をクリックします。 -
下記画面のように
インストールが完了しました
というメッセージが出ればインストールは完了です。Spresense VSCode IDE では C/C++ for Visual Studio Code
およびCortex Debug
を使用するため、自動的にこれらの拡張機能がインストールされます。
2.4.1. Remote-WSL2上でのSpresense 拡張機能のインストール(Windows11のみ)
Windows11のWSL2上で開発を行うためには、VSCodeのリモートウィンドウを開いて改めてSpresense 拡張機能のインストールが必要です。以下の手順に従い、リモートウィンドウ上でSpresense 拡張機能をインストールしてください。
-
VSCode画面左下にある下記アイコンをクリックします。
-
ディストリビューションを使用した新しいWSLウィンドウ…
を選択します -
インストールしたWSL2のディストリビューションを選択します。
-
画面左下が以下のようになっているリモートウィンドウが開いたことを確認します。
-
拡張機能画面で
Spresense
を検索します。 -
Spresense VSCode IDE
がリストに表示されるのでそれをクリックします。 -
ウィンドウ右に詳細が表示されるので
Install
をクリックします。
2.4.2. MSYS2 インストールPathの設定(Windows10のみ)
ここでは、開発ツールのセットアップにおいてインストールした MSYS2
をVS Codeで使用するための設定を行います。
-
F1
をタイプしコマンドパレットを表示します。 -
spresense msys2
を入力してコマンドを絞り込みSpresense: MSYS2パスの設定(Windowsのみ)
を選択します。 -
フォルダーの選択画面が出るのでMSYS2のパスを選択して
フォルダーの選択
をクリックします。 -
以上でVS Code上でSpresenseのアプリケーションを開発する環境は整いました。
3. アプリケーションプロジェクトの作成
この章では、VS Code のワークスペースにアプリケーションプロジェクト myproject
を作成する手順について解説します。
3.1. ワークスペースの作成
アプリケーションの開発を始めるために、ワークスペースの中に Spresense SDK フォルダーとプロジェクトフォルダーを追加して Spresense 用のワークスペースを作成します。 プロジェクト作成時には空のフォルダーを作成し、このワークスペースに追加することでプロジェクトの作成ができます。
ここでは、下記構成のワークスペースを "ワークスペースセットアップウィザード" を使って作成します。
設定項目 | 設定内容 |
---|---|
Spresense SDKフォルダー |
C:\msys64\home\user\spresense |
プロジェクトフォルダー |
C:\msys64\home\user\myproject |
ワークスペースファイル |
C:\msys64\home\user\myproject.code-workspace |
-
F1
キーによりコマンドパレットを開きSpresense: ワークスペースセットアップウィザード
を選択します。新規ワークスペースの作成では、ウィンドウ上のワークスペース(フォルダー)を閉じている必要があります。 -
開いた
ワークスペースの作成
ダイアログ上のSpresense SDK パス
でプロジェクトに使用する Spresense SDK のフォルダーを指定します。事前に以下のコマンドで Spresense SDK をダウンロードしておく必要があります。(例:C:\msys64\home\user\spresense へ Spresense SDK をダウンロードする場合。) $ mkdir -p C:/msys64/home/user $ cd C:/msys64/home/user $ git clone --recursive https://github.com/sonydevworld/spresense.git
既に git clone
済みの spresense.git リポジトリを更新し、指定バージョンに更新する場合は 指定バージョンのSDKを取得する方法 をご参照ください。 -
プロジェクトフォルダーパス
に新しく作成したフォルダーを指定します。WSL2のリモートウィンドウを開いている場合は、ウィンドウ上でのフォルダー作成ができません。
ターミナル
→新しいターミナル
を開き、以下のようなコマンドでプロジェクトフォルダーを作成してください。(以下の例ではHOMEディレクトリにmyproject
というフォルダーが作成されます。)mkdir ~/myproject
既に作成済みのプロジェクトフォルダーを指定する事もできます。既存のプロジェクトフォルダーを使用してワークスペースを作成する場合はここでそのプロジェクトフォルダーを指定してください。 -
作成
ボタンをクリックしウィザードを完了させます。 -
"このフォルダー内のファイルの作成者を信頼しますか?" というダイアログが表示されるので、
はい
を選択します。このダイアログで はい
を選択しなかった場合、ビルドやシリアルターミナルの表示など Spresense VSCode IDEの機能が正しく動作しません。もし、いいえ
を選択してしまった場合は、 ターミナルが正しく開かない(Windowsの場合) を参照の上、ファイルの作成者を信頼する設定を行ってください。 -
Spresenseセットアップ: セットアップ完了
が表示されればセットアップは完了です。 -
ファイル
から名前を付けてワークスペースを保存
を選択することで作成したワークスペースを保存します。保存したワークスペースファイルを ”ファイル” → "ワークスペースを開く…" から開くことで今回作成したワークスペースを開きなおすことができます。 -
以下のようにワークスペースが出来上がっていれば完了です。
上記のワークスペースセットアップウィザードを使用せず、Spresense SDK プロジェクトフォルダーの順にワークスペースへフォルダーを追加することでもワークスペースを作成することができます。 |
複数のプロジェクトフォルダーをワークスペースに追加する場合は、ソースツリーを右クリックして ワークスペースにフォルダーを追加… を実行していただく事で追加することができます。
|
3.2. プロジェクトフォルダーに含まれるファイルについて
プロジェクトフォルダーには以下の4種類のファイルが含まれます。
-
プロジェクト設定ファイル
プロジェクトフォルダー直下の
.vscode
内に保存されているファイルです。基本的にこの中のファイルは自動生成されるので新たに作成していただく必要はありません。 -
アプリケーションコマンド (次章以降で作成します。)
NuttShellコンソール上で使用できるコマンドで実行されるプログラムが入ります。この中のプログラムを実装することでオリジナルなコマンドを作成することができます。例えば
myapps
というコマンドであれば以下の用のNuttShellでコマンドを実行できます。NuttShell (NSH) NuttX-8.2 nsh> myapps <<動作中の出力>>
-
ASMPワーカープログラム (次章以降で作成します。)
Spresenseの特徴であるマルチコアを使用するプログラムです。このプログラムを作成し、上記のアプリケーションコマンドから使用することでマルチコアを使用したアプリケーションを追加することができます。
-
プロジェクトMakefile (
LibTarget.mk
,Make.defs
,Makefile
) (次章以降で作成します。)プロジェクト全体をビルドするために必要なファイルです。このファイルを変更した場合正しくビルドできない可能性があります。
3.3. プロジェクトメニューについて
ワークスペースを作成し、アプリケーションプロジェクトの作成ができると以下のようなSpresenseプロジェクトメニューが使えるようになります。
3.3.1. Spresenseプロジェクトメニュー一覧
-
Spresense: プロジェクトフォルダーへの追加…
プロジェクトにアプリケーションコマンドやASMPワーカを追加する場合に使います。詳しくは アプリケーションコマンドの追加 をご参照ください。
-
Spresense: SDKコンフィグ
プロジェクトのビルドコンフィグレーションをカスタマイズする場合に使います。詳しくは ビルドのコンフィグレーション をご参照ください。
-
Spresense: アプリケーションのビルド
作成したアプリケーションをビルドする場合に使います。詳しくは プロジェクトのビルド をご参照ください。
-
Spresense: アプリケーションのクリーン
アプリケーションのビルド時に作成されるファイルを削除する場合に使います。ビルド環境を一旦クリアする場合にこのメニューを選択してください。
-
Spresense: ビルドと書き込み
アプリケーションをビルドし、Spresenseへ書き込む場合に使います。詳しくは Spresenseボードへの書き込みと動作確認 をご参照ください。
4. アプリケーション "myapps" の作成と実行
ここでは、3章で作成したプロジェクトに対して実際にVS Code上でアプリケーション"myapps"を作成する手順を以下の流れで解説します。 "myapps" は”Hello Spresense!!!”を表示するだけのシンプルなアプリケーションです。
4.1. アプリケーションコマンドの追加
ここでは、 Hello Spresense!!!
と表示するだけのアプリケーションコマンド myapps
を追加する場合の手順について説明します。
設定項目 | 設定内容 |
---|---|
追加対象プロジェクトフォルダー |
C:\msys64\home\user\myproject |
アプリケーションコマンド名 |
myapps |
-
前の章で作成したプロジェクトフォルダー(
myproject
)上で右クリックし、Spresense: プロジェクトフォルダーへの追加…
を選択します。 -
開いた
プロジェクトフォルダーへの追加
ダイアログからアプリケーションコマンドを追加したいプロジェクトフォルダーを選択し次へ
をクリックします。 -
アイテムの種類から
アプリケーションコマンド
を選択し次へ
をクリックします。 -
アプリケーションコマンド名
に追加したいアプリケーションコマンドの名前を入力します。(今回の例ではmyapps
です。)使用できる文字は英字(a ~ z, A ~ Z)、数字(0 ~ 9)及びアンダースコア(_)で、コマンド名は英字から始まっている必要があります。(良い例:app, Audio_player, Camera02. 悪い例:_app, Audio-player, 02Camera) -
作成
ボタンをクリックすると、下図のようにプログラムファイルが追加され、メインソースファイルがエディターに表示されれば完了です。
4.3. ビルドのコンフィグレーション
前の章では、プロジェクトフォルダーに対してアプリケーションを追加しプログラムを実装しました。これらのプログラムを適切にビルドするためには、機能に応じたビルドのコンフィグレーションが必要になります。
ここでは、myapps
をビルドするために必要なコンフィグレーションおよびその手順について解説します。
今回は Spresense を動かす以外の特別な機能は無いので、以下の内容ではカーネルとSDKをコンフィグレーションします。
SDK v1.5以前では、SDKコンフィグとは別にカーネルコンフィグを行う必要があります。 カーネルのコンフィグレーション方法、ビルド方法はSDK v1.5以前のビルド方法 を参照ください。 |
コンフィグレーションツールの詳細は ビルドのコンフィグレーションについて を参照ください。 |
コンフィグレーション | 内容 |
---|---|
SDK |
デフォルト(Device, Feature, Examplesのプリセット追加無し)の設定で保存します。 |
4.3.1. SDKのコンフィグレーション
プリセットを選択せずに新規作成しコンフィグレーションします。
-
プロジェクトフォルダーを右クリックしプロジェクトメニューから
Spresense: SDKコンフィグ
を選択します。既に他のカーネルコンフィグやSDKコンフィグが開いている場合は予め閉じてください。コンフィグ画面は一度に一つしか開くことができません。 利用可能なコンフィグレーションを表示するまでに時間がかかる場合があります。 -
新規作成
をクリックして SDKのプリセット一覧を開きます。 -
OK
をクリックします。 -
保存
をクリックし保存します。 -
コンフィグレーションは保存されました。
と表示されればSDKのコンフィグレーションは完了です。環境によっては保存に時間がかかります。完了のメッセージが出てくるまでしばらくお待ちください。
4.4. プロジェクトのビルド
前の章までで、プロジェクトの作成・コンフィグレーションを行いました。
ここでは、作成されたプログラムをSpresenseへ書き込みができるようなバイナリ(.spk
ファイル)へビルドする手順について解説します。
Spresense SDKのカーネルとなる NuttX
を含めビルドされるため、相当の時間がかかります。(お使いの環境によっては、数十分かかることもあります。)
SDK v1.5以前では、アプリケーションのビルドとは別にカーネルのビルドを行う必要があります。 カーネルのビルド方法はSDK v1.5以前のビルド方法 を参照ください。 |
4.5. Spresenseボードへの書き込みと動作確認
これまでの章ではプロジェクトの作成からSpresenseへ書き込みを行うバイナリの作成までを解説しました。
ここでは実際に作成したバイナリをSpresenseへ書き込み、動作を確認するまでの手順を解説します。
4.5.1. シリアルポートの設定
-
USB シリアルポートの確認方法を参照し、PCとSpresenseをUSBで接続します。
-
F1
キーをタイプしてコマンドパレットを表示します。 -
spresense serial port
と入力し、コマンドを絞り込みます。 -
Spresense: シリアルポートの選択
を選択します。 -
シリアルポートの選択
リストの中からSpresenseのポートを選択します。
4.5.2. ブートローダの書き込み
作成したアプリケーションを正しく動作させるためには、Spresenseに使用しているSDKのバージョンに合ったブートローダをインストールしておく必要があります。
ブートローダは一度書きこめばSDKのバージョンが更新されない限り再度インストールする必要はありません。
ブートローダのインストール方法はブートローダのインストールをご参照ください。
5. 制限事項
5.1. 使用するフォルダーによっては Spresense VSCode IDE をお使いいただけません
Spresense VSCode IDE では、一部ビルドシステムの仕様により使用するフォルダーのパスに使用する文字の種類によって以下のような制約があります。
-
Windowsでの制限事項
-
フォルダーのパスに日本語を含む場合(例:C:\Users\ソニー太郎\project)
ICEによるデバッグが出来ません。
Spresense SDK Version 1.4.1以前及び Version 1.0.1 以前のSpresense VSCode IDE を利用している場合はすべての機能が動作しません。
-
-
すべてのOSで共通の制限事項
-
フォルダーのパスにスペースを含む場合(例:C:\Users\Sony Taro\project)
すべての機能が動作しません。
-
これらの条件に当てはまる場合は、新しくアカウントを作成し Spresense VSCode IDE を利用することを推奨します。 |
6. 付録
6.1. ブートローダのインストール
Spresense及びSpresense VSCode IDEの機能を使うためには、最新のブートローダをインストールする必要があります。インストールしない場合、SpresenseやSpresense VSCode IDEが正しく動作しません。
ブートローダのインストール手順について解説します。
ブートローダのインストールは、始めてお使いになるとき、あるいはSDKのバージョンが更新された時に行ってください。 |
-
F1
キータイプしてコマンドパレットを表示します。 -
spresense bootloader
と入力しコマンドを絞り込み、Spresense: ブートローダの書き込み
を選択します。 -
ブートローダのインストールには別途ダウンロード…
というメッセージが表示されるのでOK
をクリックします。ブートローダはWeb上からダウンロードします。 -
Webブラウザが開くので、ページの指示通りにダウンロードをします。
-
インストールの継続を確認するダイアログが表示されるので
OK
をクリックします。 -
ファイルダイアログが表示されるので、ダウンロードしたZIPファイルを選択します。
-
ZIPファイルの選択後、ブートローダのインストールが開始します。
-
下図のようにタスクが正常に完了すればブートローダのインストールは完了です。
6.2. マルチコアアプリケーション"myasmp"の作成
ここでは、マルチコアアプリケーション "myasmp"を作成する手順について解説します。今回利用する例では、メインコアのプログラム(スーパーバイザー)がサブコアで動作するプログラム(ワーカー)を開始させ、サブコアから "Hello ASMP!" という文字列を受信するアプリケーションを作成します。 ワークスペースは "myapps" を作成したものを流用しています。
6.2.1. ASMPワーカープログラムの追加
ここでは、サブコアが Hello ASMP!
をメインコアへ送信し、メインコアが受信した文字を表示するだけのマルチコアアプリケーションを追加する場合の手順について説明します。
設定項目 | 設定内容 |
---|---|
追加対象プロジェクトフォルダー |
C:\msys64\home\user\myproject |
ASMPワーカープログラム名 |
myapps |
サンプルアプリケーションの作成 |
Yes |
サンプルアプリケーションコマンド名 |
asmpApp |
-
プロジェクトフォルダー(
myproject
)上で右クリックし、Spresense: プロジェクトフォルダーへの追加…
を選択します。 -
開いた
プロジェクトフォルダーへの追加
ダイアログからASMPワーカープログラムを追加したいプロジェクトフォルダーを選択し次へ
をクリックします。 -
アイテムの種類から
ASMPワーカープログラム
を選択し次へ
をクリックします。 -
ASMPワーカープログラム名
に追加したいワーカーの名前を入力します。(今回の例ではmyasmp
です。)使用できる文字は英字(a ~ z, A ~ Z)、数字(0 ~ 9)及びアンダースコア(_)で、コマンド名は英字から始まっている必要があります。(良い例:app, Audio_player, Camera02. 悪い例:_app, Audio-player, 02Camera) -
ASMPワーカーをサブコアで開始させるアプリケーションも作成するので、
作成するASMPワーカー…サンプルアプリケーションを作成する
にチェックを入れます。 -
サンプルアプリケーションコマンド名
に作成するコマンド名を入力します。(今回の例ではasmpApp
です。) -
作成
ボタンをクリックすると、下図のようにプログラムファイルが追加され、メインソースファイルがエディターに表示されれば完了です。
6.2.1.1. 追加されるファイルについて
ファイル(フォルダー) | 内容 | |
---|---|---|
|
ワーカープログラム及びそれをビルドするためのMakefileが含まれるフォルダーです。 |
|
|
ワーカーのメインソースファイルです。サブコアで動作するプログラムを実装します。 |
|
|
ワーカーをカスタマイズするためのMakefileです。新規追加ファイルやビルドに使用するフラグを記述することができます。 |
|
|
メインコアのアプリケーションと定義を共有するためのヘッダファイルのフォルダーです。 |
|
|
作成したワーカーを使用するためのサンプルアプリケーションが含まれるフォルダーです。 |
6.2.2. ビルドのコンフィグレーション
マルチコアアプリケーションをビルドするためには、SDKコンフィグのプリセットにある Feature/asmp
を有効にする必要があります。
ここでは、ASMPを有効にするためのコンフィグレーションを行います。
-
プロジェクトフォルダーを右クリックしプロジェクトメニューから
Spresense: SDKコンフィグ
を選択します。既に他のカーネルコンフィグやSDKコンフィグが開いている場合は予め閉じてください。コンフィグ画面は一度に一つしか開くことができません。 利用可能なコンフィグレーションを表示するまでに時間がかかる場合があります。 -
新規作成
をクリックして SDKのプリセット一覧を開きます。 -
Feature
カテゴリをクリックしカテゴリを切り替え、asmp
を選択します。 -
OK
をクリックします。 -
保存
をクリックし保存します。 -
コンフィグレーションは保存されました。
と表示されればSDKのコンフィグレーションは完了です。環境によっては保存に時間がかかります。完了のメッセージが出てくるまでしばらくお待ちください。
6.2.3. プロジェクトのビルド
メインコアアプリケーションと同じ方法でビルドを行うことができます。 メインコアのアプリケーションがビルドされた後にワーカーのビルドを行っています。
-
ビルドしたいプロジェクトフォルダーの上で右クリックします。
-
Spresense: アプリケーションのビルド
をクリックします。 -
アプリケーションビルドが開始するので完了まで待ちます。
6.2.3.1. 生成されるファイルについて
ファイル(フォルダー) | 内容 | ||
---|---|---|---|
|
|
ワーカー用デバッグELFファイルです。 |
|
|
ビルドした生成物がコピーされるフォルダーです。 |
||
|
SPI-Flashへ書き込まれるワーカー用ELFファイルがコピーされるフォルダーです。 |
||
|
ワーカー |
||
|
SpresenseボードのSPI-Flashへ書き込むファイルです。 |
||
|
デバッグ情報を含んだELFファイルです。ICEデバッグの際このファイルをSpresenseへロードします。 |
6.3. ビルドのコンフィグレーションについて
ビルドのコンフィグレーション(カーネルコンフィグ/SDKコンフィグ)は開発するアプリケーションのコンフィグレーションを行うツールです。 それぞれに各用途別にプリセットが用意されています。
SDKのv1.5以前ではカーネル/SDKの2つのパートに分かれ、v2.0以降ではそれらが統合されてSDKコンフィグを使ってコンフィグレーションを行います。
Microsoft社のC/C++拡張機能によるキーワード補完や、構文解析はこのコンフィグレーションが完了していないと正しく機能しません。プログラムの作成の前にコンフィグレーションをしておくことを推奨します。 |
6.3.1. SDK v1.5以前のコンフィグレーション
-
カーネルのコンフィグレーション
Spresense SDKで使用しているRTOSである
NuttX
のコンフィグレーションです。Spresenseで動作するプログラムのコアな設定を行います。今回の例では、カーネルに特別な設定は必要が無いのでプリセットの
release
を使ってコンフィグレーションします。プリセット 内容 release
Spresense SDK の機能が一通り動作する設定です。通常の使い方ではこちらのプリセットをお使いください。
debug
release に加え、デバッグログなどの設定が含まれるプリセットです。
-
SDKのコンフィグレーション
Spresense SDK特有の機能のコンフィグレーションです。Spresense上で動作する オーディオ、カメラ、GPSなどの機能はここでコンフィグレーションします。また、 Examplesアプリケーションや、システムツールについても、ここでコンフィグレーションすることができます。
今回は標準APIである
printf
を使うだけなので、デフォルトの設定を使います。プリセットカテゴリー 内容 Device
センサーやSDcardなど、デバイスを使うためのプリセットです。プリセットによってはデバイスを接続する必要があります。
Feature
Spresense の機能やシステムツールなどを使うためのプリセットです。
Examples
Spresense SDKで提供しているサンプルアプリケーションを使うためのプリセットです。
6.3.2. SDK v2.0以降のコンフィグレーション
-
SDKのコンフィグレーション
NuttXカーネル及びSpresense SDKの機能を設定することができます。Spresense上で動作する オーディオ、カメラ、GPSなどの機能を含め、NuttXが提供している機能はここでコンフィグレーションします。また、 Examplesアプリケーションや、システムツールについても、ここでコンフィグレーションすることができます。
今回は標準APIである
printf
を使うだけなので、デフォルトの設定を使います。プリセットカテゴリー 内容 Device
センサーやSDcardなど、デバイスを使うためのプリセットです。プリセットによってはデバイスを接続する必要があります。
Feature
Spresense の機能やシステムツールなどを使うためのプリセットです。
Examples
Spresense SDK及びNuttX で提供しているサンプルアプリケーションを使うためのプリセットです。
6.4. ターミナルを使用したSpresense SDKの操作方法
ここでは、 VS Code のターミナル機能を使ってSpresense SDKを操作する方法について説明します。プロジェクトメニューでは行えない操作を行う場合にこのターミナルをお使いいただくことができます。
6.5. ICEデバッグ
6.5.1. デバッガの準備
6.5.1.1. ハードウェア
-
CMSIS-DAP 準拠デバッグアダプタ (ICE)
-
Keil ULINK2 (http://www.keil.com/arm/ulink2/)
-
NXP MCU-Link (https://www.nxp.jp/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-debug-probe:MCU-LINK)
-
NXP MCU-Link Pro (https://www.nxp.jp/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-pro-debug-probe:MCU-LINK-PRO)
-
-
SWD connector
6.5.2. ICEを使ったメインコアのデバッグ
ここでは、ビルドしたバイナリをSpresenseのSRAMへ直接ロードし動作を確認(デバッグ)する方法を解説します。
指定場所にブレークを張ってプログラムを指定場所で止めたり、Watch文を記載して指定条件時に止めるなどのデバッグができます。
6.5.2.1. ブレークポイントの指定
-
ブレークポイントを設定したいソースコードを開きます(6行目にセットしたい場合)。
-
セットしたい行の左端(行番号の左隣)をクリックして赤い印をつけます。
以上でブレークポイントの設定は完了です。
6.5.2.2. デバッグの開始
-
ウィンドウの左のアイコンからデバッグアイコンをクリックします。
-
デバッグ構成リストから作成したプロジェクトのデバッグメニューを選択します。
-
デバッグの開始ボタンをクリックします。
-
デバッグのための処理が走るので完了を待ちます。
-
デバッグコントロールボタンのアイコンが下図のように
続行
に切り替わったら準備完了です。 -
先ほどの
続行
アイコンをクリックすると、Spresenseは実行を開始します。 -
設定したブレークポイントを通るような処理(例: コマンドを実行)をすると設定したポイントでブレークされます。
-
再度
続行
アイコンをクリックするとブレークから解放されます。
6.5.3. ICEを使ったマルチコアデバッグ
Spresense SDK v1.5.0以降およびSpresense VSCode IDE v1.1.0以降で利用できます。また、Spresense SDK v1.4.2以前からお使いの方は開発ツールの再インストールが必要です。 |
ワーカープログラムのデバッグには、ユーザープログラムでの対応が必要になります。詳しくはマルチコアデバッグの注意点と制約事項を参照してください。 |
ASMPフレームワークを使用してワーカープログラムを作成した際は、アプリケーションコマンドはメインコア、ワーカープログラムは空いているサブコアで実行されます。
このため、ワーカーのデバッグを行う場合は使用されるサブコアに対する設定を追加する必要があります。サブコアに対する設定は以下の手順で行います。
-
サブコア番号の特定
-
デバッグ構成の追加
6.5.3.1. サブコア番号の特定
ワーカーが起動するサブコアの番号を特定するためには、一度アプリケーションを動作させて、実際に割り当てられた番号を調べます。
ワーカーに割り当てられた番号を調べるためには、mptask_getsubcoreid()
を使用します。 mptask_assign()
または mptask_exec()
の実行後に mptask_getsubcoreid()
を呼び出すことで実行されているコアの番号を取得できます。
mptask_getsubcoreid
呼び出し例 ret = mptask_assign(&mptask);
if (ret != 0)
{
return ret;
}
ret = mptask_getsubcoreid(&mptask);
if (ret < 0)
{
return ret;
}
printf("Sub Core ID: %d\n", ret);
割り当てられるコアの番号は、 mptask_assign()
および mptask_exec()
を呼び出す順番で決まります。呼び出す順番が同じであれば毎回実行時に同じコアに割り当てられます。mptask_assign()
および mptask_exec()
の呼び出し順序を変更した場合は、再度 mptask_getsubcoreid()
を呼び出して番号を確認してください。
6.5.3.2. デバッグ構成の追加
デバッグビューの左上にある歯車アイコンを押して launch.json
を開き、右下に表示される「構成の追加…」をクリックします。
「構成の追加…」をクリックすると、以下のように各コアに対応する設定が表示されます。サブコア番号の特定で調べた番号に対応するサブコア構成を選択してください。
構成を選択すると、以下のような設定が launch.json
に追加されます。
asmp-debug
の場合){
"name": "Sub Core 1",
"cwd": "${workspaceFolder:asmp-debug}/_worker/",
"executable": "./.debug",
"request": "attach",
"type": "cortex-debug",
"servertype": "external",
"gdbTarget": "localhost:50001"
},
ここで cwd
と executable
をそれぞれ適切なフォルダパスおよびファイルパスに編集します。
項目名 |
説明 |
例 |
|
構成名 |
任意の名前 |
|
ワーカーフォルダへのパス |
|
|
デバッグ情報付き実行ファイルへのパス。 |
|
|
デバッガの起動種別を指定します |
変更しないでください |
|
使用するデバッガの種類を指定します |
変更しないでください |
|
デバッグサーバーの種類を指定します |
変更しないでください |
|
GDBの接続先を指定します |
接続エラーが起こった場合のみ変更してください※ |
※1 トラブルシューティング サブコアに繋がらない 参照
プロジェクトフォルダ名を asmp-debug
、ワーカープログラム名を sample
とした場合は以下のようになります。
{
"name": "Sub Core 1",
"cwd": "${workspaceFolder:asmp-debug}/sample_worker/",
"executable": "./sample.debug",
"request": "attach",
"type": "cortex-debug",
"servertype": "external",
"gdbTarget": "localhost:50001"
},
サブコア構成を追加した直後は、編集が必要な箇所にカーソルが移動しています。そのまま、sample と入力すれば、cwd と executable の必要な箇所を同時に入力できます。
|
構成が追加されると、デバッグビューの左上にあるドロップダウンに追加した構成が表示されるようになります。
さらに、Main Core
にマルチコアデバッグ用の設定と configFiles
設定項目に以下のサブコア用の設定ファイルを追加します。
"numberOfProcessors": 2,
"targetProcessor": 0
対象のサブコア番号 |
ファイル名 |
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
最終的にマルチコアデバッグを行うために必要な launch.json
の内容は以下のようになります。
{ "version": "0.2.0", "configurations": [ { "name": "Sub Core 1", "cwd": "${workspaceFolder:asmp-debug}/sample_worker/", "executable": "./sample.debug", "request": "attach", "type": "cortex-debug", "servertype": "external", "gdbTarget": "localhost:50001" }, { "name": "Main Core", "cwd": "${workspaceFolder:asmp-debug}", "executable": "./out/${workspaceFolderBasename}.nuttx", "request": "launch", "type": "cortex-debug", "servertype": "openocd", "numberOfProcessors": 2, (1) "targetProcessor": 0, (2) "configFiles": [ "interface/cmsis-dap.cfg", "cxd5602.cfg", "cxd5602_sub1.cfg" (3) ], "searchDir": [ "${workspaceFolder:spresense}/sdk/tools" ], "svdFile": "${workspaceFolder:spresense}/sdk/tools/SVD/cxd5602.svd", "debuggerArgs": [ "-ix", ".vscode/.gdbinit" ], "preLaunchTask": "Clean flash", "overrideLaunchCommands": [ "monitor reset", "monitor halt", "load" ], "overrideRestartCommands": [ "monitor sleep 3000", "monitor halt", "load" ] } ] }
1 | デバッグ対象となるコアの数(例の場合はメイン+サブコア1つで合計2コア) |
2 | `0`固定 |
3 | サブコア1設定ファイル。 cxd5602.cfg の下に追加します。 |
サブコア設定ファイルを追加する際はカンマ( , )のつけ忘れに注意してください。
|
メインコア構成編集に失敗したなどの理由でデフォルトの構成に戻したい場合は、構成の追加から Spresense: メインコア を追加すれば復元できます。
|
6.5.3.4. 実行制御
サブコアのデバッグが開始されると、デバッグツールバーに接続中のコアのドロップダウンが表示されます。各コアに対して、それぞれステップ実行などの実行制御が可能になります。制御したい対象のコアを選択した後、一時停止などの操作を行ってください。
サブコアを選択した場合は、ドロップダウンの隣のボタンが 切断 に切り替わります。
|
6.5.3.5. マルチコアデバッグの注意点と制約事項
Spresense VSCode IDEでは、メインコアのアプリケーションをICEデバッガ経由でSpresenseボードにロードし、アプリケーションの開始を含めた実行制御を行います。これをローンチ(launch
)と呼びます。 これに対し、サブコアで実行するワーカープログラムは、既にロード/実行されているプログラムにデバッガが接続してデバッグを行います。これをアタッチ(attach
)と呼びます。
ASMPフレームワークを使用したワーカープログラムをデバッグする際は、アプリケーション自身がワーカーのロードを行うため、必ずアタッチを用いたデバッグを行うことになります。
アタッチの場合はローンチと異なり、既に実行しているプログラムに対してデバッグ接続するため、接続時に処理が通過してしまうステートメントに対するブレーク機能は使用できません。また、デバッグ接続までに処理が完了してしまうようなワーカープログラムも同様にデバッグ機能が使用できません。
これらの制約事項を回避するためには、起動時にアプリケーションからメッセージを待って同期を取ってから処理を開始するようにする、ワーカープログラムを終了しないようなプログラムにする、などの対策が必要になります。
ASMPのサンプルコードはアプリケーションとワーカーで同期を取るようなサンプルとなっています。mptask_exec()
の後の mptask_send()
でワーカーにメッセージを送ると、ワーカーの mpmq_receive()
でメッセージを受け取った後、処理が継続されるようになっています。
ret = mptask_exec(&mptask); (1)
if (ret < 0)
{
err("mptask_exec() failure. %d\n", ret);
return ret;
}
ret = mpmq_send(&mq, MSG_ID_SAYHELLO, 0xdeadbeef); (2)
if (ret < 0)
{
err("mpmq_send() failure. %d\n", ret);
return ret;
}
1 | ワーカーのロードと実行。 |
2 | ここにブレークポイントを設定すると、アプリケーションが再実行されるまでワーカーの処理が mpmq_receive() で停止します。 |
ret = mpmq_init(&mq, KEY_MQ, 0);
ASSERT(ret == 0);
ret = mpmq_receive(&mq, &msgdata); (1)
ASSERT(ret == MSG_ID_SAYHELLO);
1 | アプリケションから開始のメッセージを受け取って同期を取る。 |
上記のようなプログラムを作成した場合は、以下の手順でマルチコアデバッグを行うことができます。
-
アプリケーションの
mpmq_send()
にブレークポイントを設定 -
アプリケーションのデバッグを開始
-
コンソールからアプリケーションを起動
-
アプリケーションがブレークポイントが設定された場所で停止したら、サブコアのデバッグを開始
以下のサンプルコードは無限ループの場合の例です。作成したいワーカープログラムに応じた、適切な方法を選択してください。
ret = mpmq_init(&mq, KEY_MQ, 0);
ASSERT(ret == 0);
while (1)
{
ret = mpmq_receive(&mq, &msgdata);
switch (ret) {
/* メッセージに対する処理 */
}
}
6.5.4. Windows11 + WSL2 環境でのICEデバッグのセットアップ
Windows11 + WSL2 の環境でICEデバッグを行う場合は、起動方法が通常時と異なります。
6.5.4.1. launch.json
の構成
デバッグビューの左上にある歯車アイコンを押して launch.json
を開きます。
Main Core
の設定では以下の項目を設定します。
"servertype": "external", (1) "gdbTarget": "my-debug-pc.local:3333", (2) "overrideLaunchCommands": [ "shell sleep 3", (3) "monitor reset", "monitor halt", "load" ],
1 |
"openocd" から "external" に変更 |
2 | 接続先のホスト名とポートを指定 |
3 | リセット前のディレイの追加 |
PC名は使用するPCの名前です。Windowsの設定から確認することができます。また、WSLターミナルから ポート番号は、メインコアの場合は PC名が |
Sub Core
の設定では、 gdbTarget
のみを変更します。
"gdbTarget": "my-debug-pc.local:3334" (1)
1 | サブコア1の場合、ポート番号 3334 を指定 |
{ "version": "0.2.0", "configurations": [ { "name": "Sub Core 1", "cwd": "${workspaceFolder:myapp}/worker_worker/", "executable": "./worker.debug", "request": "attach", "type": "cortex-debug", "servertype": "external", "svdFile": "${workspaceFolder:spresense}/sdk/tools/SVD/cxd5602.svd", "gdbTarget": "my-debug-pc.local:3334" }, { "name": "Main Core", "cwd": "${workspaceFolder}/sdk", "executable": "./nuttx", "request": "launch", "type": "cortex-debug", "servertype": "external", "svdFile": "${workspaceFolder}/sdk/tools/SVD/cxd5602.svd", "debuggerArgs": [ "-ix", "${workspaceFolder:spresense}/sdk/tools/.gdbinit" ], "overrideLaunchCommands": [ "shell sleep 3", "monitor reset", "monitor halt", "load" ], "overrideRestartCommands": [ "monitor sleep 3000", "monitor halt", "load" ], "gdbTarget": "my-debug-pc.local:3333" } ] }
6.5.4.2. openocd.exe の起動
WSL2でデバッグを行う際は、ICEを使用する際のアプリケーション(OpenOCD)をユーザーが手動で起動する必要があります。また、VSCodeを起動するたびに行う必要があります。
WSL2ターミナルを開き、以下のコマンドを実行してください。
cd spresense (1) ~/spresenseenv/windows/bin/openocd.exe -s sdk/tools -f interface/cmsis-dap.cfg -f cxd5602.cfg -c "bindto 0.0.0.0"
1 | 作業ディレクトリをspresenseリポジトリに移動 |
マルチコアデバッグを行う場合は、 -f cxd5602.cfg -f cxd5602_sub1.cfg のようにサブコアファイルを追加してください
|
OpenOCD を起動すると、初回起動時のみ以下のようなメッセージが表示されるので、「許可」をクリックしてください。
OpenOCD が正しく起動すると以下のようなログが出力されます。
Open On-Chip Debugger 0.11.0-00001-g0550db706 (2023-03-13-07:54) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : auto-selecting first available session transport "swd". To override use 'transport select <transport>'. DEPRECATED! use 'adapter speed' not 'adapter_khz' DEPRECATED! use 'adapter srst delay' not 'adapter_nsrst_delay' Info : Listening on port 6666 for tcl connections Info : Listening on port 4444 for telnet connections Info : CMSIS-DAP: SWD Supported Info : CMSIS-DAP: JTAG Supported Info : CMSIS-DAP: FW Version = 1.10 Info : CMSIS-DAP: Serial# = KBPDF4YSR3VMG Info : CMSIS-DAP: Interface Initialised (SWD) Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1 Info : CMSIS-DAP: Interface ready Info : clock speed 1000 kHz Info : SWD DPIDR 0x5ba02477 Info : cxd5602.cpu3: hardware has 6 breakpoints, 4 watchpoints Info : starting gdb server for cxd5602.cpu3 on 3333 Info : Listening on port 3333 for gdb connections
デバッグ中はOpenOCDを起動したターミナルウィンドウを閉じないでください。 |
一度デバッグを停止してもOpenOCDを再度起動する必要はありませんが、OpenOCDを起動したターミナルウィンドウを閉じてしまった場合は再度起動する必要があります。 |
OpenOCD が正しく起動した後は、デバッグの開始 の章に記載されている方法と同様の操作でデバッグを行うことができます。
6.6. SDK v1.5以前のビルド方法
SDK v1.5以前のビルドシステムでは、アプリケーションのコンフィグレーション・ビルドの前にカーネルのコンフィグレーション・ビルドが必要となります。
ここでは、SDK v1.5以前のSDKを使って開発するために必要なカーネルのコンフィグレーションとビルド方法を説明します。
6.6.1. カーネルのコンフィグレーション
カーネルはSpresenseの機能が一通り使用できるプリセット release
を使ってコンフィグレーションを行います。
-
プロジェクトフォルダーを右クリックしプロジェクトメニューから
Spresense: カーネルコンフィグ
を選択します。既に他のカーネルコンフィグやSDKコンフィグが開いている場合は予め閉じてください。コンフィグ画面は一度に一つしか開くことができません。 利用可能なコンフィグレーションを表示するまでに時間がかかる場合があります。 -
新規作成
メニューを開き、 Kernelのプリセット一覧を表示します。 -
プリセットから
release
を選択し、OKをクリックします。 -
保存
をクリックし保存します。 -
コンフィグレーションは保存されました。
と表示されればカーネルのコンフィグレーションは完了です。環境によっては保存に時間がかかります。完了のメッセージが出てくるまでしばらくお待ちください。 -
コンフィグレーションを閉じます。
6.6.2. カーネルのビルド
カーネルのコンフィグレーションが完了したら、アプリケーションのビルドで使えるようにカーネルのビルドを行います。様々な機能が含まれるため、相当の時間がかかります。(お使いの環境によっては、数十分かかることもあります。)
カーネルのコンフィグレーションや、ソースコードを変更しない限り、再度ビルドする必要はありません。
-
ビルドしたいプロジェクトフォルダーの上で右クリックしプロジェクトメニューから
Spresense: カーネルのビルド
を選択します。 -
カーネルビルドが開始するので完了まで待ちます。
-
ターミナルはタスクで再利用されます、閉じるには任意のキーを押して下さい。
が表示されればカーネルのビルドは完了です。
これらのコンフィグレーション・ビルドが行えればSDK2.0.0以降の手順同様にアプリケーションのコンフィグレーション及びビルドを行うことができます。
7. トラブルシューティング
ここでは、 VS Code を使用する上で発生しうるトラブルとその対処方法をカテゴリ別に解説します。上手く VS Code が動作しない場合はこちらを参照ください。
7.1. セットアップ
7.1.1. ターミナルが正しく開かない(Windowsの場合)
Windowsの環境の場合、 VS Code ではターミナルとして MSYS2
の bash
を使用しています。この bash
が開かず、以下の図のように PowerShell
や cmd (コマンドプロンプト)
が開いてしまう場合、ワークスペースの信頼が正しく設定されていない可能性があります。その場合は、次の手順をお試しください。
-
ワークスペースの信頼を設定する
-
F1
を押し、コマンドパレットを開いた後、manage workspace trust
と入力し、ワークスペース: ワークスペースの信頼を管理
を選択します。 -
信頼済みワークスペース内
の中の信頼する
を選択します。
-
7.2. ワークスペース作成後に Gitが見つかりません。
という警告メッセージが表示される
WindowsのMSYS2環境をお使いの場合、ワークスペースの作成後以下のようなメッセージが表示されることがあります。
これは、VSCodeのGit拡張機能からのメッセージで、Gitがインストールされていないことを示すメッセージです。 GitリポジトリをVSCode上で操作する場合はVSCodeに表示されるメッセージに従いGitをインストールしてください。
7.3. プロジェクトのビルド
7.3.1. ビルドが進まない
ビルドが進まない場合、お使いのPCの負荷が上がっている場合や、ターミナルの設定に問題がある可能性があります。次の手順でターミナルの状態を確認して下さい。
-
ターミナル
→新しいターミナル
をウィンドウのメニューから選択します。 -
ターミナル上で
echo ${SHELL}
コマンドを実行します。 -
結果が
/bin/bash
あるいは/usr/bin/bash
になっていない場合は ターミナルが正しく開かない(Windowsの場合) を実施します。
7.3.2. ビルドエラーが起こる
7.3.2.1. "application.mk: No such file or directory" と表示される場合
以下のようなメッセージが表示されてビルドに失敗する場合は、お使いのプロジェクト設定ファイルがインストールされている Spresense VSCode IDE のバージョンと合っていません。この場合はコマンドパレットから Spresense: プロジェクトフォルダ設定の更新
を実行してプロジェクト設定ファイルを更新してください。
Makefile:30: /home/user/myproject/.vscode/application.mk: No such file or directory make[2]: *** No rule to make target '/home/user/myproject/.vscode/application.mk'. Stop.
または
Makefile:12: /home/user/myproject/.vscode/worker.mk: No such file or directory make: *** No rule to make target '/home/user/myproject/.vscode/worker.mk'. Stop.
7.4. マルチコアデバッグ
7.4.1. サブコアに繋がらない
ご使用の環境によってデバッガが使用するポート番号が変わる可能性があります。トップメニューから 表示
→ 出力
を選択し、出力ウィンドウのドロップダウンから Adapter Output
を選択します。
表示されるデバッガのログに、以下のように Info: Listening on port xxxxx for gdb connections
という出力が並んでいる箇所があります。この行の先頭がメインコア、それ以降の行が追加したサブコアの順番で並んでいます。サブコアをすべて有効にした場合は以下のように出力されます。
ご使用になりたいサブコア番号に対応したポート番号が、サブコア構成の gdbTarget
設定で書かれているポート番号と一致しているかどうかを確認してください。
例として、サブコア1を追加し、ログの2行目が Info: Listening on port 51000 for gdb connections
と表示されていた場合の設定は以下のようになります。
gdbTarget
設定例 "gdbTarget": "localhost:51000"
7.4.2. CORTEX PERIPHERALS
が表示されない
デバッグ構成の svdFile
項目が正しく設定されているか、もしくは設定されているパスにファイルが存在するかをご確認ください。マルチコアデバッグを行う場合は、メインコアおよび使用するすべてのサブコアにこの設定がされている必要があります。
svdFile
"svdFile": "${workspaceFolder:spresense}/sdk/tools/SVD/cxd5602.svd"
また、Spresenseリポジトリを spresense
以外に名前を変更している場合は、上記の spresense
の部分を適切なフォルダ名に修正してください。
${workspaceFolder} は使用される際に実際の物理パスに変換されます。ワークスペース内に複数のフォルダが存在する場合は、 ${workspaceFolder:folder-name} のようにコロン(: )の後に続けてワークスペース内のフォルダ名を指定します。
|