hi,
FRDM-MCXN947 ボードの SDK を使用したマルチコア rpmsg-lite ピンポン通信のデモでは、マスター コアがリモート コアをブートストラップして開始した後、リモート コアが最初に rpmsg_lite_remote_init() を実行し、次にマスター コアに通知し、リモート コアが接続を待つ (rpmsg_lite_wait_for_ link_up()) ことがわかりました。この間、マスター コアは待機します (while())。マスター コアが初期化された後 rpmsg_lite_master_init() )、リモート コアは接続を確立してエンドポイントを作成し、データを送信する準備ができたことをマスターに通知します。使用中に、通知と待機コードをコメントアウトしたところ、マスターコアとリモートコアもリンクアップして通信できることがわかりましたが、これの理由は何ですか?マスターシステムクロックがリモートクロックよりも遅いためですか?
また、私たちのMCUにそのような通知メカニズムがない場合、マスターコアとスレーブコアがリンクアップして通信できることをどのように確認するのでしょうか?
ありがとう&よろしく
yzs
Hello,
詳しいご説明をいただき、ありがとうございました。あなたが言ったように、私はそれを試し、実際にあなたが説明した状況を再現しました。2 つのコア間の通信を確保する方法については、フラグ ビットまたは ISR と組み合わせた共有メモリを使用できます。
私はあなたに役立つかもしれないいくつかのリンクを共有します:
MCMgrDataExchangeDiagram.pngメイン ·nxp-mcuxpresso/mcuxsdk-middleware-multicore ·GitHubの
RPMsg-Lite ユーザーズガイド : RPMsg コンポーネント
BRs、
Celeste
hi, @Celeste_Liu
感謝。変更が正しく通信されることを確認しましたが、このコードをコメントアウトせずrpmsg_lite_wait_for_link_up(my_rpmsg, RL_BLOCK)、マスター側とリモート側(void)MCMGR_TriggerEvent(kMCMGR_ RemoteApplicationEvent, APP_RPMSG_READY_EVENT_DATA)の両方をマスター側とリモート側の両方でコメントアウトしました。添付の画像に見られるように、テスト結果が異なる原因はここにある可能性があります。
しかし、rpmsg_lite_wait_for_link_up(my_rpmsg、RL_BLOCK)をコメントアウトした後でも、問題なく通信できることがわかりました。
だから私は、core0とcore1が私たちのプラットフォームにそのような通知メカニズムがなく、core0が最初にmaster_main()を実行する場合に通信していることをどのように確認したいと思いますか?
BR
yzs
こんにちは@yzs、
あなたの投稿をありがとう、そして遅れて申し訳ありません。
ご指摘の状況を踏まえて、以下のテストを実施しました。次の 2 つの例を使用しました。
core0 と core1 の間のリンク関係は、rpmsg_lite_pingpong_cm33_core0 のプロパティで確認できます。
次に、あなたが提案したように、通知とrpmsg_lite_pingpong_cm33_core1のmain_remote.cで待機するための関連コードをコメントアウトしました。
/* Signal the other core we are ready by triggering the event and passing the APP_RPMSG_READY_EVENT_DATA */
-101 (void)MCMGR_TriggerEvent(kMCMGR_RemoteApplicationEvent, APP_RPMSG_READY_EVENT_DATA);
+102 //(void)MCMGR_TriggerEvent(kMCMGR_RemoteApplicationEvent, APP_RPMSG_READY_EVENT_DATA);
-107 rpmsg_lite_wait_for_link_up(my_rpmsg, RL_BLOCK);
+108 //rpmsg_lite_wait_for_link_up(my_rpmsg, RL_BLOCK);
その後、rpmsg_lite_pingpong_cm33_core1を再コンパイルし、コンパイルされたbinファイルを再度フラッシュして再テストしました。いくつかのテストの結果、マスターコアとリモートコアが通信できないことがわかりました。
したがって、あなたの側に運用上の問題があるのではないかと思います。コードをコメントアウトした後で再コンパイルしましたか?それとも、あなたの業務と私の業務に違いはありますか?調査を続けるためにも、ぜひお知らせください。
マスターコアとリモートコアのクロックが異なるという兆候はどこにも見当たりませんでした。
メールボックスを使用してマルチコア通信を実現することもできます。SDKにはこのようなデモがあります。行って見てみてください。
それがあなたを助けることができることを願っています。
------------------------------------------------------------------------------------------
注:この投稿があなたの質問に答えた場合は、「解決策として受け入れる」ボタンをクリックしてください。ありがとうございます!
------------------------------------------------------------------------------------------
よろしくお願いいたします。
Celeste