ASMPワーカープログラム作成後、プロジェクトのクリーンに失敗する

環境

  • OS : macOS Mojave v10.14.6
  • Spesense SDK : v2.0.1
  • Spresense VSCode IDE : v1.2.0

現象

公式のマルチコアアプリケーション作成ガイドに沿って、プロジェクトをビルドし、ボードに書き込んだ。

しかし思った通りにアプリケーションが動かなかったため、プロジェクトのクリーンを一度行ったら以下のようなエラーが出た。

> Executing task in folder myproject: .vscode/build.sh clean <

usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
        [-e pattern] [-f file] [--binary-files=value] [--color=when]
        [--context[=num]] [--directories=action] [--label] [--line-buffered]
        [--null] [pattern] [file ...]
Create .version
make[3]: Nothing to be done for `clean'.
Makefile:12: /Users/username/spresense/spresense/sdk/apps/.vscode/worker.mk: No such file or directory
make[6]: *** No rule to make target `/Users/username/spresense/spresense/sdk/apps/.vscode/worker.mk'.  Stop.
make[5]: *** [displayCamera_worker/_clean] Error 2
make[4]: *** [/Users/username/Desktop/Lchika/spresense/myproject_clean] Error 2
make[3]: *** [clean] Error 2
make[2]: *** [/Users/username/spresense/spresense/sdk/apps/spresense/_clean] Error 2

また、SDKコンフィグファイルをSpresense VSCode IDE上から開こうとしても、“コンフィグファイルの解析に失敗した"というメッセージが出て、開けなくなってしまった。

この時のワークスペース関係のフォルダ設定は以下の通り。

  • Spresense SDKのパス
    • /Users/username/spresense/spresense/
  • プロジェクトフォルダーのパス
    • /Users/username/Desktop/Lchika/spresense/myproject/

とりあえずの対応策

ASMPワーカープログラムプログラムのmakefileを以下のように書き換える。

- include $(APPDIR)/.vscode/worker.mk
+ include $(SPRESENSE_HOME)/.vscode/worker.mk

原因

詳細は分かっていない。

エラー文から、/Users/username/spresense/spresense/sdk/apps/.vscode/worker.mkという存在しないファイルを参照しようとしていることがわかる。 make関係でパスの設定がおかしくなっていると思われるが、ASMPワーカーとアプリケーションで、makefileの違いを見たら、上記対応策のような違いがあった。 アプリケーション側に合わせたら、エラーが出なくなった。

備考

最初にSpresenseの公式にあるビルドエラーが起こるを参考にプロジェクトフォルダ設定の更新を行ったが解決しなかった。


マルチコアアプリケーション実行時にmptask_init() failure. -2というエラーが出る

環境

  • OS : macOS Mojave v10.14.6
  • Spesense SDK : v2.0.1
  • Spresense VSCode IDE : v1.2.0

現象

公式のマルチコアアプリケーション作成ガイドに沿って、プロジェクトをビルドし、ボードに書き込んだ。

シリアルターミナル上で作成したマルチコアアプリケーションasmpAppを実行すると、以下のような表示になった。

nsh> asmpApp
mptask_init() failure. -2

原因

/mnt/spif以下の容量が足りず、ワーカープログラムを書き込めていなかった。

上記現象において、mptask_init()の戻り値が-2になっている。mptask_init()は、ワーカープログラムを参照できないときに戻り値が-2になる。

サンプルプログラムでは、ワーカープログラムは/mnt/spif以下に書き込まれるようになっている。以下のように/mnt/spif配下を確認したところ、以前保存していた画像ファイルがあり、これのせいでワーカープログラムをうまく書き込めていないようだった。

nsh> cd /mnt
nsh> cd spif
nsh> ls
/mnt/spif:
 VIDEO001.YUV
 VIDEO002.YUV
 VIDEO003.YUV
 ...
 VIDEO024.YUV

対応策

以下のようにrmコマンドで/mnt/spif以下の不要なファイルを削除する。(nuttxでは*のようなワイルドカードは指定できないようだった。)

nsh> rm VIDEO001.YUV

備考

上記対応策を実施した後、再書き込みし、アプリケーションを実行したところ、正常に動作した。

nsh> asmpApp
attached at 00010000
Worker response: ID = 1, data = 1234
Worker said: Hello, ASMP World!
Worker exit status = 0

スタートアップスクリプトの機能を有効にしようとしたときにビルドエラーが起きる

環境

  • OS : macOS Catalina v10.15.6
  • Spesense SDK : v2.0.1
  • Spresense VSCode IDE : v1.2.0

現象

アプリケーションの自動起動を有効にするためにfeature/startup_scriptdefconfigを参考に、以下をsdk.condigに追加してビルドした。

NSH_CUSTOMROMFS=y
NSH_CUSTOMROMFS_HEADER="../../system/startup_script/nsh_romfsimg.h"
SYSTEM_STARTUP_SCRIPT=y

すると、ビルド時に以下のエラーがでた。

CC:  nsh_romfsetc.c
nsh_romfsetc.c:82:6: error: #error You must select CONFIG_BOARDCTL_ROMDISK in your configuration file
 #    error You must select CONFIG_BOARDCTL_ROMDISK in your configuration file
      ^~~~~
nsh_romfsetc.c: In function 'nsh_romfsetc':
nsh_romfsetc.c:99:29: error: storage size of 'desc' isn't known
   struct boardioc_romdisk_s desc;
                             ^~~~
nsh_romfsetc.c:99:29: warning: unused variable 'desc' [-Wunused-variable]
make[3]: *** [nsh_romfsetc.o] Error 1
make[2]: *** [/Users/username/spresense/spresense/sdk/apps/nshlib_all] Error 2
make[1]: *** [../sdk/apps/libapps.a] Error 2
make: *** [all] Error 2
ターミナル プロセス "/bin/bash '-c', '.vscode/build.sh build'" が終了コード 2 で終了しました。

CONFIG_BOARDCTL_ROMDISKをコンフィグファイルで選択しなければならないらしい。

対応策

sdk.configに以下を追記する。

CONFIG_BOARDCTL_ROMDISK=y

アフィリエイト