ENTRYPOINTを変更した場合、リセットした後にGNSSが開始できない
GNSSを利用したアプリケーションをSPRESENSE SDKを使って開発しています。
CONFIG_SDK_USER_ENTRYPOINT
をnsh_main
とし、シェルからコマンドを実行した場合には、その後リセットボタンを押してリセットした後も問題なく何度でも起動が可能です。
一方で、CONFIG_SDK_USER_ENTRYPOINT
を自分のアプリケーションに向けた場合、フラッシュ書き込み直後は正しく動作しますが、2回目の起動以降 (パワーオンリセットもリセットボタンによるリセットも) ioctl(CXD56_GNSS_IOCTL_START)
が失敗し、GNSSが利用できません。
エントリーポイント内で boardctl(BOARDIOC_INIT, 0);
は実行していますが、nshから起動する場合と異なり、他にもすべき初期化などはありますでしょうか。
実際のエントリポイントはこちらです。
https://github.com/chibiegg/spresense-gnss-logger/blob/8b812a6ace63f9d87cafc9f1bd77628e12a59518/logger/logger_main.c#L38
rcS を利用した場合
CONFIG_SDK_USER_ENTRYPOINT
による起動ではなく、 /etc/init.d/rcS
を作成し、起動スクリプトから実行した場合も同様の問題に当たりました。
サンプルプログラムの場合
サンプルとして含まれているgnss_factory
を有効にし、gnss_factory_test
をCONFIG_SDK_USER_ENTRYPOINTにした場合も以下のように2回目以降エラーになるため不思議です...
Hello, FACTORY SAMPLE!!
start error -1
End of FACTORY Sample:-1