質問: Spresenceの複数のCPUでの制御に興味が有り,購入しました。 Spresence v1.2.0を使用して, spresense\examples\asmp を試し動作しました。 このサンプルは,Supervisor(1cpu):Worker(1cpu)なので,Workerを複数CPUにしたいと思います。 そこで,同じWorkerタスク(hello)を各CPUロードして,Supervisorとメッセージの手続きをさせたいと思います。 この時に各Workerタスクでは,メッセージIDを異なる値にしなければ,成りません。 そのために,Workerタスクを起動する時に引数を渡せないかと思った次第です。 関数mptask_exec(&mptask)には,引数が渡せない様です。 実現方法が無いでしょうか。 以上よろしお願いします。
回答: 同じWorkerを複数CPUで動かしてみた経験は無いのですが、メッセージキューのメッセージIDは、コードを見る限り、メッセージキューごとに任意に定義できるようです。API仕様書にもUser defined message IDと書かれていますし。 各Workerに対して、それぞれ mptask と mpmq オブジェクトを作成していると思うので、メッセージIDは同じ値を使って問題無いと思います。 というのも、複数のWorker(別プログラムですが)を動かすときにメッセージIDは特に意識せず同じ値を使って問題無く通信できています。相手が共通のWorkerプログラムだったとしても、各CPUごとに独立して動作しているはずなので特に変わりはないと思います。