Developer World Spresense
English 中文
目次

1. はじめに

このページでは、Microsoft社が提供するVisual Studio Code(以下VS Code)及びその拡張機能 Spresense VSCode IDE を使ってSpresense SDKのアプリケーションを開発するための手順を解説しています。

Spresense VSCode IDE は Spresense SDK のアプリケーション開発に特化した VS Code の拡張機能です。この拡張機能では次のような機能が追加され、プロジェクトの作成からICEデバッグまで統一されたインタフェースで開発を支援します。

vscode overview ja
  • アプリケーションをビルド・デバッグするための設定の自動作成

  • マルチコアを含むアプリケーションのひな形の作成

  • GUIによるビルドのコンフィグレーション

  • Spresenseの動作を確認するシリアルターミナル

以上の機能を使い、ここでは myproject というプロジェクトに簡単なサンプルアプリケーション myapps を追加する例を使って、アプリケーションを Spresense で動かすまでの手順を解説します。

vscode sample overview ja

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)

    • 8.1/10

  • macOS

    • High Sierra (10.13)以降

32bit版 OS には対応していません。

2.1.1. Linux向けセットアップ

  1. シリアル通信の設定

    以下のコマンドを実行し、使用するユーザーを dialout グループに追加します。

    sudo usermod -a -G dialout <user-name>
    

    コマンドを実行した後、再起動してください。再起動するまで設定は有効になりません。

  2. ビルドに必要なツールをインストールします。ターミナルを起動し、以下のコマンドを実行します。

    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://プロキシーサーバー名:ポート番号
    

    インストールしたツールを使用可能にするために、以下のコマンドを実行します。

    source ~/spresenseenv/setup
    

    このコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の .bashrc に上記コマンドを追加してください。

    ツールチェーンはホームディレクトリ以下の spresenseenv/usr/bin にインストールされます。
  3. Spresense SDK リポジトリからソースコードをダウンロードします。

    git clone --recursive https://github.com/sonydevworld/spresense.git
    

2.1.2. Windows向けセットアップ

  1. 下記のサイトからMSYS2のインストーラをダウンロードし、インストールします。

  2. ビルドに必要なツールをインストールします。スタートメニューにある 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://プロキシーサーバー名:ポート番号
    

    インストールしたツールを使用可能にするために、以下のコマンドを実行します。

    source ~/spresenseenv/setup
    

    このコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の .bashrc に上記コマンドを追加してください。

    ツールチェーンは /opt/spresenseenv/usr/bin にインストールされます。
  3. Spresense SDK リポジトリからソースコードをダウンロードします。

    git clone --recursive https://github.com/sonydevworld/spresense.git
    
  4. シリアルドライバのインストール

    シリアルドライバのインストールは、Spresense ボードをPCに接続する前に行ってください。

    Spresense ボードをUSBシリアルで接続するために、ドライバをインストールする必要があります。下記リンクよりドライバをダウンロードし、インストールしてください。

2.1.3. macOS向けセットアップ

  1. Apple社が提供している開発ツールをインストールします。 ターミナルを起動し、以下のコマンドを実行します。

    xcode-select --install
    
  2. 以下のサイトからPython3のインストーラをダウンロードし、インストールします。

  3. wgetをインストールします。(一部のNuttXアプリケーション・ツールをビルドする際に必要になります)

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    brew install wget
    
  4. ビルドに必要なツールをインストールします。ターミナルを起動し、以下のコマンドを実行します。

    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://プロキシーサーバー名:ポート番号
    

    インストールしたツールを使用可能にするために、以下のコマンドを実行します。

    source ~/spresenseenv/setup
    

    このコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の .bash_profile に上記コマンドを追加してください。

    ツールチェーンはホームディレクトリ以下の spresenseenv/usr/bin にインストールされます。
  5. ターミナルで以下のコマンドを実行し、Spresense SDK リポジトリからソースコードをダウンロードします。

    git clone --recursive https://github.com/sonydevworld/spresense.git
    
  6. シリアルドライバのインストール

    シリアルドライバのインストールは、Spresense ボードをPCに接続する前に行ってください。

    Spresense ボードをUSBシリアルで接続するために、ドライバをインストールする必要があります。下記リンクよりドライバをダウンロードし、インストールしてください。

    High Sierra (10.13)以降のmacOSにこのドライバをインストールする場合、インストール中にセキュリティに関する警告が表示されます。 「システム環境設定 > セキュリティ」 メニューを開き、「一般」にある「開発元"Silicon Laboratories Inc"のシステムソフトウェアの読み込みがブロックされました。」と表示されている右にある「許可」ボタンをクリックしてください。この操作が行われない場合、シリアルで接続することができません。

2.1.4. USB シリアルポートの確認方法

Spresense メインボードと PC を USB で接続します。

spresense musb connect
図 1. メインボードへのUSBの接続
2.1.4.1. Linux 上でのシリアルポートの確認方法
  1. ターミナルを開きます。

  2. 次のコマンドを入力してください。

    dmesg | grep "cp21.*attached"
    [12220.625979] usb 1-1: cp210x converter now attached to ttyUSB0
    
  3. 上記の例では、 ポート名は /dev/ttyUSB0 になります。

2.1.4.2. Windows 上でのシリアルポートの確認方法
  1. デバイスマネージャー を開きます。

  2. Silicon Labs CP210x USB to UART Bridge のCOMポートの番号を確認します。

    tutorial arduino windows device manager find port
    図 2. デバイスマネージャーでCOMポートを確認
  3. 上図の例では、ポート名は COM9 になります。

2.1.4.3. macOS 上でのシリアルポートの確認方法
  1. ターミナルを開きます。

  2. 次のコマンドを入力してください。

    ls /dev/{tty,cu}.*
    /dev/cu.SLAB_USBtoUART  /dev/tty.SLAB_USBtoUART
    
  3. 上記の例では、ポート名は /dev/cu.SLAB_USBtoUART になります。

2.2. VSCodeのインストール

  1. 下記のサイトからVSCodeのインストーラをダウンロードします。

  2. ダウンロードしたインストーラを実行します

    • Windowsの場合

      1. インストーラ(VSCodeUserSetup.exe)を起動します。

      2. ダイアログに従いインストールを進めてください。

    • macOSの場合

      1. インストールファイル(VSCode-darwin-stable.zip)を解凍します。

      2. 解凍されたフォルダ Visual Studio Code.appアプリケーション フォルダに移動します。

    • Ubuntuの場合

      1. 次のコマンドでダウンロードしたファイル(code_1.46.1-xxxx.deb)からインストールします。

        $ sudo apt install code_1.46.1-xxxx.deb
  3. インストールしたVS Codeを起動します

    VS Code起動画面

2.3. Japanese Language Packのインストール

VS Codeを日本語化するためのパッケージをインストールします。これにより各種メッセージ、メニューが日本語になります。

  1. ウィンドウの左側の拡張機能ボタン(下図黄色枠)をクリックし、拡張機能インストール画面を表示します。

    VS Code拡張機能画面
  2. Search Extensions in Marketplace のテキストボックスに Japanese と入力します。

  3. Japanese Language Pack for VS Code がリストに表示されるのでそれをクリックします。

  4. ウィンドウ右に詳細が表示されるので Install をクリックします。

    日本語化パッケージインストール画面
  5. 日本語化を有効にするために右下のポップアップの Yes をクリックして再起動します。

    再起動のポップアップ
  6. 下図のような画面で再起動したら日本語化パッケージのインストールは完了です。

    日本語化パッケージインストール完了

2.4. Spresense 拡張機能のインストール

Spresense Extension αバージョンをインストールしている場合は、アンインストールを行ってください。アンインストールを行わない場合、Spresense 拡張機能が正しく動きません。
  1. 拡張機能画面で Spresense を検索します。

  2. Spresense VSCode IDE がリストに表示されるのでそれをクリックします。

  3. ウィンドウ右に詳細が表示されるので Install をクリックします。

    Spresense VSCode IDEインストール画面
  4. 下記画面のように インストールが完了しました というメッセージが出ればインストールは完了です。

    Spresense VSCode IDEインストール完了
    Spresense VSCode IDE では C/C++ for Visual Studio Code および Cortex Debug を使用するため、自動的にこれらの拡張機能がインストールされます。

2.4.1. MSYS2 インストールPathの設定(Windowsのみ)

ここでは、開発ツールのセットアップにおいてインストールした MSYS2 をVS Codeで使用するための設定を行います。

  1. F1 をタイプしコマンドパレットを表示します。

  2. spresense msys2 を入力してコマンドを絞り込み Spresense: MSYS2パスの設定(Windowsのみ) を選択します。

    MSYS2のパス設定コマンド
  3. フォルダーの選択画面が出るのでMSYS2のパスを選択して フォルダーの選択 をクリックします。

    MSYS2のパス設定の選択
  4. 以上で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

vscode wizard create workspace overview ja
  1. F1 キーによりコマンドパレットを開き Spresense: ワークスペースセットアップウィザード を選択します。

    新規ワークスペースの作成では、ウィンドウ上のワークスペース(フォルダー)を閉じている必要があります。
  2. 開いた ワークスペースの作成 ダイアログ上の 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
  3. プロジェクトフォルダーパス に新しく作成したフォルダーを指定します。

    既に作成済みのプロジェクトフォルダーを指定する事もできます。既存のプロジェクトフォルダーを使用してワークスペースを作成する場合はここでそのプロジェクトフォルダーを指定してください。
  4. 作成 ボタンをクリックしウィザードを完了させます。

  5. Spresenseセットアップ: セットアップ完了 が表示されればセットアップは完了です。

    vscode setup workspace complete ja
  6. ファイル から 名前を付けてワークスペースを保存 を選択することで作成したワークスペースを保存します。

    vscode menu save workspace ja
    保存したワークスペースファイルを ”ファイル” → "ワークスペースを開く…​" から開くことで今回作成したワークスペースを開きなおすことができます。
  7. 以下のようにワークスペースが出来上がっていれば完了です。

    vscode workspace complete ja
上記のワークスペースセットアップウィザードを使用せず、Spresense SDK プロジェクトフォルダーの順にワークスペースへフォルダーを追加することでもワークスペースを作成することができます。
複数のプロジェクトフォルダーをワークスペースに追加する場合は、ソースツリーを右クリックして ワークスペースにフォルダーを追加…​ を実行していただく事で追加することができます。

3.1.1. プロジェクトフォルダーに含まれるファイルについて

プロジェクトフォルダーには以下の4種類のファイルが含まれます。

  1. プロジェクト設定ファイル

    プロジェクトフォルダー直下の .vscode 内に保存されているファイルです。基本的にこの中のファイルは自動生成されるので新たに作成していただく必要はありません。

  2. アプリケーションコマンド (次章以降で作成します。)

    NuttShellコンソール上で使用できるコマンドで実行されるプログラムが入ります。この中のプログラムを実装することでオリジナルなコマンドを作成することができます。例えば myapps というコマンドであれば以下の用のNuttShellでコマンドを実行できます。

    NuttShell (NSH) NuttX-8.2
    nsh> myapps
    <<動作中の出力>>
  3. ASMPワーカープログラム (次章以降で作成します。)

    Spresenseの特徴であるマルチコアを使用するプログラムです。このプログラムを作成し、上記のアプリケーションコマンドから使用することでマルチコアを使用したアプリケーションを追加することができます。

  4. プロジェクトMakefile (LibTarget.mk, Make.defs, Makefile) (次章以降で作成します。)

    プロジェクト全体をビルドするために必要なファイルです。このファイルを変更した場合正しくビルドできない可能性があります。

3.2. シェル設定の有効化

Spresense VSCode IDE では Spresense SDK をビルド・デバッグするためにシェルの特別な設定を行っています。その設定を有効にするために、一旦ターミナルを表示してシェル設定の変更を許可する必要があります。

vscode terminal setting ja
  1. ターミナル から 新しいターミナル を選択します。

  2. 新しいターミナルの作業ディレクトリを選択してください と入力を求められますので、どちらかを選択してください。(どちらでも同じ結果になります。)

  3. このワークスペースによるターミナルシェルの変更を許可しますか? というダイアログが出現するので 許可 をクリックします。

    この作業で開いたターミナルは、必要な設定のされていない状態で開きます。(Windows10ではPowerShellで開くなど) プロジェクトで使用しないので閉じてください。
    このダイアログで 許可 を選択しなかった場合、ビルドやシリアルターミナルの表示など Spresense VSCode IDEの機能が正しく動作しません。もし、 許可しない を選択してしまった場合は、 ターミナルが正しく開かない(Windowsの場合) を参照の上、シェルの変更を許可してください。

4. アプリケーション "myapps" の作成と実行

ここでは、3章で作成したプロジェクトに対して実際にVS Code上でアプリケーション"myapps"を作成する手順を以下の流れで解説します。 "myapps" は”Hello Spresense!!!”を表示するだけのシンプルなアプリケーションです。

4.1. アプリケーションコマンドの追加

ここでは、 Hello Spresense!!! と表示するだけのアプリケーションコマンド myapps を追加する場合の手順について説明します。

設定項目 設定内容

追加対象プロジェクトフォルダー

C:\msys64\home\user\myproject

アプリケーションコマンド名

myapps

vscode new item creation ja
  1. 前の章で作成したプロジェクトフォルダー(myproject)上で右クリックし、 Spresense: プロジェクトフォルダーへの追加…​ を選択します。

  2. 開いた プロジェクトフォルダーへの追加 ダイアログからアプリケーションコマンドを追加したいプロジェクトフォルダーを選択し 次へ をクリックします。

  3. アイテムの種類から アプリケーションコマンド を選択し 次へ をクリックします。

  4. アプリケーションコマンド名 に追加したいアプリケーションコマンドの名前を入力します。(今回の例では myapps です。)

    使用できる文字は英字(a ~ z, A ~ Z)、数字(0 ~ 9)及びアンダースコア(_)で、コマンド名は英字から始まっている必要があります。(良い例:app, Audio_player, Camera02. 悪い例:_app, Audio-player, 02Camera)
  5. 作成 ボタンをクリックすると、下図のようにプログラムファイルが追加され、メインソースファイルがエディターに表示されれば完了です。

    vscode wizard item application created ja

4.1.1. 追加されるファイルについて

ファイル(フォルダー) 内容

myapps

コマンドプログラム及びそれをビルドするためのMakefileが含まれるフォルダーです。

myapps_main.c

コマンドのメインソースファイルです。新規作成後このファイルを編集するだけでアプリケーションを実装できます。

Make.defs

コマンドをビルドするためのMakefileです。

Makefile

コマンドをカスタマイズするためのMakefileです。新規追加ファイルやビルドに使用するフラグを記述することができます。

4.2. アプリケーションの実装

この章では、 Hello Spresense!!! と表示するようにアプリケーションコマンドのプログラムを実装します。

4.2.1. メインソースコードを編集する

メインソースコード(今回の例では myapps_main.c)は、アプリケーションコマンドを追加した際に作成され、エディタに表示されます。 メインソースコードを以下のように編集します。

myapps_main.c
#include <sdk/config.h>
#include <stdio.h>

int myapps_main(int argc, char *argv[])
{
  printf("Hello Spresense!!!"); (1)
  return 0;
}
1 追加したい処理を実装します。
vscode edit main code file ja

4.3. ビルドのコンフィグレーション

前の章では、プロジェクトフォルダーに対してアプリケーションを追加しプログラムを実装しました。これらのプログラムを適切にビルドするためには、機能に応じたビルドのコンフィグレーションが必要になります。

ここでは、myapps をビルドするために必要なコンフィグレーションおよびその手順について解説します。

今回は Spresense を動かす以外の特別な機能は無いので、以下の内容ではカーネルとSDKをコンフィグレーションします。

SDK v1.5以前では、SDKコンフィグとは別にカーネルコンフィグを行う必要があります。 カーネルのコンフィグレーション方法、ビルド方法はSDK v1.5以前のビルド方法 を参照ください。
コンフィグレーションツールの詳細は ビルドのコンフィグレーションについて を参照ください。
コンフィグレーション 内容

SDK

デフォルト(Device, Feature, Examplesのプリセット追加無し)の設定で保存します。

4.3.1. SDKのコンフィグレーション

プリセットを選択せずに新規作成しコンフィグレーションします。

vscode sdk config ja
  1. プロジェクトフォルダーを右クリックしプロジェクトメニューから Spresense: SDKコンフィグ を選択します。

    既に他のカーネルコンフィグやSDKコンフィグが開いている場合は予め閉じてください。コンフィグ画面は一度に一つしか開くことができません。
    利用可能なコンフィグレーションを表示するまでに時間がかかる場合があります。
  2. 新規作成 をクリックして SDKのプリセット一覧を開きます。

  3. OK をクリックします。

  4. 保存 をクリックし保存します。

  5. コンフィグレーションは保存されました。 と表示されればSDKのコンフィグレーションは完了です。

    環境によっては保存に時間がかかります。完了のメッセージが出てくるまでしばらくお待ちください。

4.4. プロジェクトのビルド

前の章までで、プロジェクトの作成・コンフィグレーションを行いました。

ここでは、作成されたプログラムをSpresenseへ書き込みができるようなバイナリ(.spk ファイル)へビルドする手順について解説します。

Spresense SDKのカーネルとなる NuttX を含めビルドされるため、相当の時間がかかります。(お使いの環境によっては、数十分かかることもあります。)

SDK v1.5以前では、アプリケーションのビルドとは別にカーネルのビルドを行う必要があります。 カーネルのビルド方法はSDK v1.5以前のビルド方法 を参照ください。

4.4.1. アプリケーションのビルド

vscode build application ja
  1. ビルドしたいプロジェクトフォルダーの上で右クリックしプロジェクトメニューから Spresense: アプリケーションのビルド を選択します。

  2. アプリケーションビルドが開始するので完了まで待ちます。

  3. ターミナルはタスクで再利用されます、閉じるには任意のキーを押して下さい。 が表示されればアプリケーションのビルドは完了です。

4.4.1.1. 生成されるファイルについて
ファイル(フォルダー) 内容

out

ビルドした生成物がコピーされるフォルダーです。

myproject.nuttx.spk

SpresenseボードのSPI-Flashへ書き込むファイルです。

myproject.nuttx

デバッグ情報を含んだELFファイルです。ICEデバッグの際このファイルをSpresenseへロードします。

4.5. Spresenseボードへの書き込みと動作確認

これまでの章ではプロジェクトの作成からSpresenseへ書き込みを行うバイナリの作成までを解説しました。

ここでは実際に作成したバイナリをSpresenseへ書き込み、動作を確認するまでの手順を解説します。

4.5.1. シリアルポートの設定

  1. USB シリアルポートの確認方法を参照し、PCとSpresenseをUSBで接続します。

  2. F1 キーをタイプしてコマンドパレットを表示します。

    コマンドパレットの表示
  3. spresense serial port と入力し、コマンドを絞り込みます。

  4. Spresense: シリアルポートの選択 を選択します。

    `Spresense: シリアルポートの選択` の選択
  5. シリアルポートの選択 リストの中からSpresenseのポートを選択します。

    シリアルポートの選択

4.5.2. ブートローダの書き込み

作成したアプリケーションを正しく動作させるためには、Spresenseに使用しているSDKのバージョンに合ったブートローダをインストールしておく必要があります。

ブートローダは一度書きこめばSDKのバージョンが更新されない限り再度インストールする必要はありません。

ブートローダのインストール方法はブートローダのインストールをご参照ください。

4.5.3. ビルドバイナリの書き込み

vscode flash application ja
  1. 書き込みたいしたいプロジェクトフォルダーの上で右クリックしプロジェクトメニューから Spresense: ビルドと書き込み を選択します。

  2. アプリケーションのビルドが開始するので完了を待ちます。

    前章の Spresense: アプリケーションのビルド をスキップして直接このコマンドを実行することもできます。
  3. ビルドが終わり次第 Spresenseへの書き込みが開始します。

  4. Spresenseへの書き込みが終わるとシリアルターミナルが開きます。

4.5.4. 動作確認

開いているシリアルターミナル上で作成した myapps コマンドを入力しEnterキーをタイプすると "Hello Spresense!!!"が表示されます。

vscode execute application command ja
  1. 開いたシリアルターミナル上で myapps を入力しエンターキーを押します。

  2. 作成したコマンドの実行結果が表示されます。

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 を利用することを推奨します。

5.2. SDK v1.5以前に作成したプロジェクトがv2.0以降のSDKでビルドができません

Spresense SDK Version 2.0以降ではビルドシステムをカーネルと統合しているため、コンフィグレーションに互換性がありません。

SDK Version 2.0以降でビルドする場合は、プロジェクトフォルダ内の .vscode を削除した上でSDKのコンフィグレーションを再度実施してください。(プロジェクト全体バックアップの作成を推奨いたします。)

6. トラブルシューティング

ここでは、 VS Code を使用する上で発生しうるトラブルとその対処方法をカテゴリ別に解説します。上手く VS Code が動作しない場合はこちらを参照ください。

6.1. セットアップ

6.1.1. ターミナルが正しく開かない(Windowsの場合)

Windowsの環境の場合、 VS Code ではターミナルとして MSYS2bash を使用しています。この bash が開かず、以下の図のように PowerShellcmd (コマンドプロンプト) が開いてしまう場合、ワークスペースのターミナル設定が正しく反映されていない可能性があります。その場合は、次の手順をお試しください。

  • ターミナルシェルの変更を許可する

    Visual Studio Code Version 1.37.1以前をお使いの方

    1. F1 を押し、コマンドパレットを開きます。

    2. terminal allow と入力しコマンドを絞り込み、 Terminal: ワークスペースでシェルを構成することを許可する を選択します。

    Visual Studio Code Version 1.38.0以降をお使いの方

    1. F1 を押し、コマンドパレットを開きます。

    2. terminal manage と入力しコマンドを絞り込み、 Terminal: Manage Workspace Shell Permissions を選択します。

    3. Allow Workspace Shell Configuration を選択します。

  • ワークスペースを開きなおす

    1. ファイル(F)ワークスペースを閉じる を選択します。

    2. ファイル(F)ワークスペースを開く を選択します。

    3. 保存したワークスペースを開きます。

    4. Spresenseセットアップ: セットアップ完了 が表示されるのを待ちます。

6.2. プロジェクトのビルド

6.2.1. ビルドが進まない

ビルドが進まない場合、お使いのPCの負荷が上がっている場合や、ターミナルの設定に問題がある可能性があります。次の手順でターミナルの状態を確認して下さい。

  1. ターミナル新しいターミナル をウィンドウのメニューから選択します。

  2. ターミナル上で echo ${SHELL} コマンドを実行します。

  3. 結果が /bin/bash あるいは /usr/bin/bash になっていない場合は ターミナルが正しく開かない(Windowsの場合) を実施します。

6.2.2. ビルドエラーが起こる

6.2.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.

6.3. マルチコアデバッグ

6.3.1. サブコアに繋がらない

ご使用の環境によってデバッガが使用するポート番号が変わる可能性があります。トップメニューから 表示出力 を選択し、出力ウィンドウのドロップダウンから Adapter Output を選択します。 表示されるデバッガのログに、以下のように Info: Listening on port xxxxx for gdb connections という出力が並んでいる箇所があります。この行の先頭がメインコア、それ以降の行が追加したサブコアの順番で並んでいます。サブコアをすべて有効にした場合は以下のように出力されます。

vscode different port

ご使用になりたいサブコア番号に対応したポート番号が、サブコア構成の gdbTarget 設定で書かれているポート番号と一致しているかどうかを確認してください。

例として、サブコア1を追加し、ログの2行目が Info: Listening on port 51000 for gdb connections と表示されていた場合の設定は以下のようになります。

gdbTarget 設定例
    "gdbTarget": "localhost:51000"

6.3.2. CORTEX PERIPHERALS が表示されない

デバッグ構成の svdFile 項目が正しく設定されているか、もしくは設定されているパスにファイルが存在するかをご確認ください。マルチコアデバッグを行う場合は、メインコアおよび使用するすべてのサブコアにこの設定がされている必要があります。

サブコア構成の svdFile
    "svdFile": "${workspaceFolder:spresense}/sdk/tools/SVD/cxd5602.svd"

また、Spresenseリポジトリを spresense 以外に名前を変更している場合は、上記の spresense の部分を適切なフォルダ名に修正してください。

${workspaceFolder} は使用される際に実際の物理パスに変換されます。ワークスペース内に複数のフォルダが存在する場合は、 ${workspaceFolder:folder-name} のようにコロン(:)の後に続けてワークスペース内のフォルダ名を指定します。

7. 付録

7.1. ブートローダのインストール

Spresense及びSpresense VSCode IDEの機能を使うためには、最新のブートローダをインストールする必要があります。インストールしない場合、SpresenseやSpresense VSCode IDEが正しく動作しません。

ブートローダのインストール手順について解説します。

ブートローダのインストールは、始めてお使いになるとき、あるいはSDKのバージョンが更新された時に行ってください。
  1. F1 キータイプしてコマンドパレットを表示します。

    コマンドパレットの表示
  2. spresense bootloader と入力しコマンドを絞り込み、 Spresense: ブートローダの書き込み を選択します。

    `Spresense: ブートローダの書き込み` を選択
  3. ブートローダのインストールには別途ダウンロード…​ というメッセージが表示されるので OK をクリックします。

    ブートローダはWeb上からダウンロードします。
    ブラウザ起動の確認
  4. Webブラウザが開くので、ページの指示通りにダウンロードをします。

    ダウンロードページ1
    ダウンロードページ2
  5. インストールの継続を確認するダイアログが表示されるので OK をクリックします。

    ブートローダインストール継続確認
  6. ファイルダイアログが表示されるので、ダウンロードしたZIPファイルを選択します。

    ブートローダZIPファイルの選択
  7. ZIPファイルの選択後、ブートローダのインストールが開始します。

    ブートローダのインストール開始
  8. 下図のようにタスクが正常に完了すればブートローダのインストールは完了です。

    ブートローダのインストール完了

7.2. マルチコアアプリケーション"myasmp"の作成

ここでは、マルチコアアプリケーション "myasmp"を作成する手順について解説します。今回利用する例では、メインコアのプログラム(スーパーバイザー)がサブコアで動作するプログラム(ワーカー)を開始させ、サブコアから "Hello ASMP!" という文字列を受信するアプリケーションを作成します。 ワークスペースは "myapps" を作成したものを流用しています。

7.2.1. ASMPワーカープログラムの追加

ここでは、サブコアが Hello ASMP! をメインコアへ送信し、メインコアが受信した文字を表示するだけのマルチコアアプリケーションを追加する場合の手順について説明します。

設定項目 設定内容

追加対象プロジェクトフォルダー

C:\msys64\home\user\myproject

ASMPワーカープログラム名

myapps

サンプルアプリケーションの作成

Yes

サンプルアプリケーションコマンド名

asmpApp

vscode new asmp item creation ja
  1. プロジェクトフォルダー(myproject)上で右クリックし、 Spresense: プロジェクトフォルダーへの追加…​ を選択します。

  2. 開いた プロジェクトフォルダーへの追加 ダイアログからASMPワーカープログラムを追加したいプロジェクトフォルダーを選択し 次へ をクリックします。

  3. アイテムの種類から ASMPワーカープログラム を選択し 次へ をクリックします。

  4. ASMPワーカープログラム名 に追加したいワーカーの名前を入力します。(今回の例では myasmp です。)

    使用できる文字は英字(a ~ z, A ~ Z)、数字(0 ~ 9)及びアンダースコア(_)で、コマンド名は英字から始まっている必要があります。(良い例:app, Audio_player, Camera02. 悪い例:_app, Audio-player, 02Camera)
  5. ASMPワーカーをサブコアで開始させるアプリケーションも作成するので、作成するASMPワーカー…​サンプルアプリケーションを作成する にチェックを入れます。

  6. サンプルアプリケーションコマンド名 に作成するコマンド名を入力します。(今回の例では asmpApp です。)

  7. 作成 ボタンをクリックすると、下図のようにプログラムファイルが追加され、メインソースファイルがエディターに表示されれば完了です。

    vscode wizard item asmp created ja
7.2.1.1. 追加されるファイルについて
ファイル(フォルダー) 内容

myasmp_worker

ワーカープログラム及びそれをビルドするためのMakefileが含まれるフォルダーです。

myasmp_worker.c

ワーカーのメインソースファイルです。サブコアで動作するプログラムを実装します。

Makefile

ワーカーをカスタマイズするためのMakefileです。新規追加ファイルやビルドに使用するフラグを記述することができます。

include

メインコアのアプリケーションと定義を共有するためのヘッダファイルのフォルダーです。

asmpApp

作成したワーカーを使用するためのサンプルアプリケーションが含まれるフォルダーです。

7.2.2. ビルドのコンフィグレーション

マルチコアアプリケーションをビルドするためには、SDKコンフィグのプリセットにある Feature/asmp を有効にする必要があります。 ここでは、ASMPを有効にするためのコンフィグレーションを行います。

vscode sdk config asmp ja
  1. プロジェクトフォルダーを右クリックしプロジェクトメニューから Spresense: SDKコンフィグ を選択します。

    既に他のカーネルコンフィグやSDKコンフィグが開いている場合は予め閉じてください。コンフィグ画面は一度に一つしか開くことができません。
    利用可能なコンフィグレーションを表示するまでに時間がかかる場合があります。
  2. 新規作成 をクリックして SDKのプリセット一覧を開きます。

  3. Feature カテゴリをクリックしカテゴリを切り替え、 asmp を選択します。

  4. OK をクリックします。

  5. 保存 をクリックし保存します。

  6. コンフィグレーションは保存されました。 と表示されればSDKのコンフィグレーションは完了です。

    環境によっては保存に時間がかかります。完了のメッセージが出てくるまでしばらくお待ちください。

7.2.3. プロジェクトのビルド

メインコアアプリケーションと同じ方法でビルドを行うことができます。 メインコアのアプリケーションがビルドされた後にワーカーのビルドを行っています。

  1. ビルドしたいプロジェクトフォルダーの上で右クリックします。

  2. Spresense: アプリケーションのビルド をクリックします。

  3. アプリケーションビルドが開始するので完了まで待ちます。

7.2.3.1. 生成されるファイルについて
ファイル(フォルダー) 内容

myasmp_worker

myasmp_worker.debug

ワーカー用デバッグELFファイルです。

out

ビルドした生成物がコピーされるフォルダーです。

worker

SPI-Flashへ書き込まれるワーカー用ELFファイルがコピーされるフォルダーです。

myasmp

ワーカー myasmp のELFファイルです。

myproject.nuttx.spk

SpresenseボードのSPI-Flashへ書き込むファイルです。

myproject.nuttx

デバッグ情報を含んだELFファイルです。ICEデバッグの際このファイルをSpresenseへロードします。

7.2.4. マルチコアアプリケーションの書き込みと動作確認

メインコアアプリケーションと同じ方法で書き込みを行うことができます。 メインコアのバイナリが書き込まれた後にワーカーのELFファイルがSPI-Flashへ書き込まれます。

7.2.4.1. ビルドバイナリの書き込み
  1. ビルドしたいプロジェクトフォルダーの上で右クリックします。

  2. Spresense: ビルドと書き込み をクリックします。

  3. アプリケーションのビルドが開始するので完了を待ちます。

  4. ビルドが終わり次第 Spresenseへの書き込みが開始します。

  5. Spresenseへの書き込みが終わるとシリアルターミナルが開きます。

7.2.4.2. 動作確認

開いているシリアルターミナル上で作成した asmpApp コマンドを入力しEnterキーをタイプすると Worker said: Hello ASMP! が表示されます。

vscode execute multicore application command ja
  1. 開いたシリアルターミナル上で asmpApp を入力しエンターキーを押します。

  2. 作成したコマンドの実行結果が表示されます。

7.3. ビルドのコンフィグレーションについて

ビルドのコンフィグレーション(カーネルコンフィグ/SDKコンフィグ)は開発するアプリケーションのコンフィグレーションを行うツールです。 それぞれに各用途別にプリセットが用意されています。

SDKのv1.5以前ではカーネル/SDKの2つのパートに分かれ、v2.0以降ではそれらが統合されてSDKコンフィグを使ってコンフィグレーションを行います。

Microsoft社のC/C++拡張機能によるキーワード補完や、構文解析はこのコンフィグレーションが完了していないと正しく機能しません。プログラムの作成の前にコンフィグレーションをしておくことを推奨します。

7.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で提供しているサンプルアプリケーションを使うためのプリセットです。

7.3.2. SDK v2.0以降のコンフィグレーション

  • SDKのコンフィグレーション

    NuttXカーネル及びSpresense SDKの機能を設定することができます。Spresense上で動作する オーディオ、カメラ、GPSなどの機能を含め、NuttXが提供している機能はここでコンフィグレーションします。また、 Examplesアプリケーションや、システムツールについても、ここでコンフィグレーションすることができます。

    今回は標準APIである printf を使うだけなので、デフォルトの設定を使います。

    プリセットカテゴリー 内容

    Device

    センサーやSDcardなど、デバイスを使うためのプリセットです。プリセットによってはデバイスを接続する必要があります。

    Feature

    Spresense の機能やシステムツールなどを使うためのプリセットです。

    Examples

    Spresense SDK及びNuttX で提供しているサンプルアプリケーションを使うためのプリセットです。

7.3.3. コンフィグレーションの保存メニュー

コンフィグレーションの保存メニューの機能は以下の通りです。

メニュー 機能

新規作成

Spresense SDKで用意しているプリセットコンフィグレーションを選択できます。

保存

設定した内容でビルドコンフィグレーションを保存します。

読み込み

保存していたバックアップ用コンフィグレーションファイルを開きます。

名前を付けて保存

設定した内容を任意の場所に保存します。ビルドに使われるコンフィグレーションファイルとは別に保存されるので、ビルドには反映されません。

7.4. ターミナルを使用したSpresense SDKの操作方法

ここでは、 VS Code のターミナル機能を使ってSpresense SDKを操作する方法について説明します。プロジェクトメニューでは行えない操作を行う場合にこのターミナルをお使いいただくことができます。

7.4.1. ターミナルの開き方

Spresense SDKを操作するので、Spresense SDKフォルダー上でターミナルを開きます。

vscode terminal new ja
  1. ターミナル から 新しいターミナル を選択します。

  2. 新しいターミナルの作業ディレクトリを選択してください と入力を求められますので、Spresense SDKフォルダーを指定してください。

  3. Spresense SDKフォルダー上でターミナルが開きます。

7.4.2. Spresense SDKをクリーンアップする

ここでは、前章で開いた Spresense SDK フォルダーのターミナルで、SDK をクリー ンナップする方法を説明します。

プロジェクトを作成し、ビルドを行った場合 Spresense SDK フォルダーにはビルドした 際に作成されたオブジェクトファイルやコンフィグレーションファイルが残っています。 それらを削除し、Spresense SDK をダウンロードした状態に戻すためにはこの方法を お使いください。

$ cd sdk
$ make distclean

7.5. ICEデバッグ

7.5.1. デバッガの準備

7.5.1.2. SWDコネクタのマウント

SWD コネクタのマウント方法は、ハードウェアガイドを参照してください。

7.5.1.3. OpenOCDの設定(Ubuntuのみ)

Ubuntuの場合は以下のコマンドでICEに接続する権限を付与する必要があります。 ICEを接続する前に行ってください。

sudo cp ~/spresenseenv/usr/contrib/60-openocd.rules /etc/udev/rules.d/
sudo udevadm control --reload

7.5.2. ICEを使ったメインコアのデバッグ

ここでは、ビルドしたバイナリをSpresenseのSRAMへ直接ロードし動作を確認(デバッグ)する方法を解説します。

指定場所にブレークを張ってプログラムを指定場所で止めたり、Watch文を記載して指定条件時に止めるなどのデバッグができます。

7.5.2.1. ブレークポイントの指定
  1. ブレークポイントを設定したいソースコードを開きます(6行目にセットしたい場合)。

    ソースコードの表示
  2. セットしたい行の左端(行番号の左隣)をクリックして赤い印をつけます。

    ブレークポイントの設定

以上でブレークポイントの設定は完了です。

7.5.2.2. デバッグの開始
  1. ウィンドウの左のアイコンからデバッグアイコンをクリックします。

    デバッグ画面の表示
  2. デバッグ構成リストから作成したプロジェクトのデバッグメニューを選択します。

    デバッグ画面の表示
  3. デバッグの開始ボタンをクリックします。

    デバッグの開始ボタン
  4. デバッグのための処理が走るので完了を待ちます。

    デバッグの準備中
  5. デバッグコントロールボタンのアイコンが下図のように 続行 に切り替わったら準備完了です。

    デバッグの準備完了
    デバッグ開始時は __start(void) でブレークがされます。
  6. 先ほどの 続行 アイコンをクリックすると、Spresenseは実行を開始します。

    実行中
  7. 設定したブレークポイントを通るような処理(例: コマンドを実行)をすると設定したポイントでブレークされます。

    ブレーク中
  8. 再度 続行 アイコンをクリックするとブレークから解放されます。

    ブレーク解放

7.5.3. ICEを使ったマルチコアデバッグ

Spresense SDK v1.5.0以降およびSpresense VSCode IDE v1.1.0以降で利用できます。また、Spresense SDK v1.4.2以前からお使いの方は開発ツールの再インストールが必要です。
ワーカープログラムのデバッグには、ユーザープログラムでの対応が必要になります。詳しくはマルチコアデバッグの注意点と制約事項を参照してください。

ASMPフレームワークを使用してワーカープログラムを作成した際は、アプリケーションコマンドはメインコア、ワーカープログラムは空いているサブコアで実行されます。

vscode multicore debug diagram

このため、ワーカーのデバッグを行う場合は使用されるサブコアに対する設定を追加する必要があります。サブコアに対する設定は以下の手順で行います。

  1. サブコア番号の特定

  2. デバッグ構成の追加

7.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() を呼び出して番号を確認してください。

7.5.3.2. デバッグ構成の追加

デバッグビューの左上にある歯車アイコンを押して launch.json を開き、右下に表示される「構成の追加…​」をクリックします。

vscode launch json

「構成の追加…​」をクリックすると、以下のように各コアに対応する設定が表示されます。サブコア番号の特定で調べた番号に対応するサブコア構成を選択してください。

vscode debug configsnippet

構成を選択すると、以下のような設定が 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"
},

ここで cwdexecutable をそれぞれ適切なフォルダパスおよびファイルパスに編集します。

表 1. サブコアのデバッグ構成

項目名

説明

name

構成名

任意の名前

cwd

ワーカーフォルダへのパス

"${workspaceFolder:asmp-debug}/sample_worker/"

executable

デバッグ情報付き実行ファイルへのパス。 cwd で設定したフォルダからの相対パスを指定します。

"./sample.debug"

request

デバッガの起動種別を指定します

変更しないでください

type

使用するデバッガの種類を指定します

変更しないでください

servertype

デバッグサーバーの種類を指定します

変更しないでください

gdbTarget

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 と入力すれば、cwdexecutable の必要な箇所を同時に入力できます。

構成が追加されると、デバッグビューの左上にあるドロップダウンに追加した構成が表示されるようになります。

vscode debug configlist

さらに、メインコアの構成の configFiles 設定項目に以下のサブコア用の設定ファイルを追加します。

表 2. サブコア用設定ファイル

対象のサブコア番号

ファイル名

1

cxd5602_sub1.cfg

2

cxd5602_sub2.cfg

3

cxd5602_sub3.cfg

4

cxd5602_sub4.cfg

5

cxd5602_sub5.cfg

最終的にマルチコアデバッグを行うために必要な launch.json の内容は以下のようになります。

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",
            "configFiles": [
                "interface/cmsis-dap.cfg",
                "cxd5602.cfg",
                "cxd5602_sub1.cfg" (1)
            ],
            "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設定ファイル。 cxd5602.cfg の下に追加します。
サブコア設定ファイルを追加する際はカンマ( , )のつけ忘れに注意してください。
メインコア構成編集に失敗したなどの理由でデフォルトの構成に戻したい場合は、構成の追加から Spresense: メインコア を追加すれば復元できます。
7.5.3.3. デバッグの開始

マルチコアデバッグを開始するには、以下の手順で行います。

  1. メインコアのデバッグ開始

  2. アプリケーションからワーカーを起動

  3. サブコアのデバッグ開始

メインコアのデバッグ開始

マルチコアデバッグを行うためには、メインコアの構成を選択し、ドロップダウン左のデバッグの開始ボタンを押します。

vscode debug maincore
アプリケーションからワーカーを起動

シリアルターミナルで、nsh のプロンプトからワーカーが起動するプログラムを動作させます。これによりワーカープログラムがロードされ実行されます。

サブコアのデバッグ開始

ワーカープログラムを起動させたら、サブコアの構成を選択し、ドロップダウン左のデバッグの開始ボタンを押します。 この操作は、メインコアが実行中でも停止中でも可能です。 サブコアのデバッグを開始すると、接続された時点で実行されていた行で一時停止します。再度実行したい場合は、デバッグツールバーの再開ボタンを押します。

vscode debug subcore
7.5.3.4. 実行制御

サブコアのデバッグが開始されると、デバッグツールバーに接続中のコアのドロップダウンが表示されます。各コアに対して、それぞれステップ実行などの実行制御が可能になります。制御したい対象のコアを選択した後、一時停止などの操作を行ってください。

vscode debug select target toolbar
サブコアを選択した場合は、ドロップダウンの隣のボタンが 切断 に切り替わります。
7.5.3.5. マルチコアデバッグの注意点と制約事項

Spresense VSCode IDEでは、メインコアのアプリケーションをICEデバッガ経由でSpresenseボードにロードし、アプリケーションの開始を含めた実行制御を行います。これをローンチ(launch)と呼びます。 これに対し、サブコアで実行するワーカープログラムは、既にロード/実行されているプログラムにデバッガが接続してデバッグを行います。これをアタッチ(attach)と呼びます。

diag 60c9a831922b050e905bd7b2f5c602e5
図 3. マルチコアデバッグ開始時のシーケンス

ASMPフレームワークを使用したワーカープログラムをデバッグする際は、アプリケーション自身がワーカーのロードを行うため、必ずアタッチを用いたデバッグを行うことになります。

アタッチの場合はローンチと異なり、既に実行しているプログラムに対してデバッグ接続するため、接続時に処理が通過してしまうステートメントに対するブレーク機能は使用できません。また、デバッグ接続までに処理が完了してしまうようなワーカープログラムも同様にデバッグ機能が使用できません。

diag 5a586c38b01d56be95c5fb2e27a0e275
図 4. ブレークポイントが機能しない場合のシーケンス
diag e606d4c8a4c1808e7a090f95180e44bf
図 5. デバッグ接続できない場合のシーケンス

これらの制約事項を回避するためには、起動時にアプリケーションからメッセージを待って同期を取ってから処理を開始するようにする、ワーカープログラムを終了しないようなプログラムにする、などの対策が必要になります。

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 アプリケションから開始のメッセージを受け取って同期を取る。

上記のようなプログラムを作成した場合は、以下の手順でマルチコアデバッグを行うことができます。

  1. アプリケーションの mpmq_send() にブレークポイントを設定

  2. アプリケーションのデバッグを開始

  3. コンソールからアプリケーションを起動

  4. アプリケーションがブレークポイントが設定された場所で停止したら、サブコアのデバッグを開始

以下のサンプルコードは無限ループの場合の例です。作成したいワーカープログラムに応じた、適切な方法を選択してください。

ワーカーを無限ループにする場合の例
  ret = mpmq_init(&mq, KEY_MQ, 0);
  ASSERT(ret == 0);

  while (1)
    {
      ret = mpmq_receive(&mq, &msgdata);

      switch (ret) {
        /* メッセージに対する処理 */
      }
    }
その他の制約事項
マルチコアデバッグ時の再起動

サブコアはアタッチ接続の為、再起動は機能しません。また、メインコアで再起動は行わないでください。

ワーカーの終了

マルチコアデバッグ時はワーカーの停止は行わないでください。

7.6. SDK v1.5以前のビルド方法

SDK v1.5以前のビルドシステムでは、アプリケーションのコンフィグレーション・ビルドの前にカーネルのコンフィグレーション・ビルドが必要となります。

ここでは、SDK v1.5以前のSDKを使って開発するために必要なカーネルのコンフィグレーションとビルド方法を説明します。

7.6.1. カーネルのコンフィグレーション

カーネルはSpresenseの機能が一通り使用できるプリセット release を使ってコンフィグレーションを行います。

vscode kernel config ja
  1. プロジェクトフォルダーを右クリックしプロジェクトメニューから Spresense: カーネルコンフィグ を選択します。

    既に他のカーネルコンフィグやSDKコンフィグが開いている場合は予め閉じてください。コンフィグ画面は一度に一つしか開くことができません。
    利用可能なコンフィグレーションを表示するまでに時間がかかる場合があります。
  2. 新規作成 メニューを開き、 Kernelのプリセット一覧を表示します。

  3. プリセットから release を選択し、OKをクリックします。

  4. 保存 をクリックし保存します。

  5. コンフィグレーションは保存されました。 と表示されればカーネルのコンフィグレーションは完了です。

    環境によっては保存に時間がかかります。完了のメッセージが出てくるまでしばらくお待ちください。
  6. コンフィグレーションを閉じます。

7.6.2. カーネルのビルド

カーネルのコンフィグレーションが完了したら、アプリケーションのビルドで使えるようにカーネルのビルドを行います。様々な機能が含まれるため、相当の時間がかかります。(お使いの環境によっては、数十分かかることもあります。)

カーネルのコンフィグレーションや、ソースコードを変更しない限り、再度ビルドする必要はありません。

vscode build kernel ja
  1. ビルドしたいプロジェクトフォルダーの上で右クリックしプロジェクトメニューから Spresense: カーネルのビルド を選択します。

  2. カーネルビルドが開始するので完了まで待ちます。

  3. ターミナルはタスクで再利用されます、閉じるには任意のキーを押して下さい。 が表示されればカーネルのビルドは完了です。

これらのコンフィグレーション・ビルドが行えればSDK2.0.0以降の手順同様にアプリケーションのコンフィグレーション及びビルドを行うことができます。