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_script
のdefconfig
を参考に、以下を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
アフィリエイト