電源サイクル時の IPCF 初期化に関する問題 (デュアルコア セットアップ)
2つのコア間でメモリを共有するためにIPCFを使用しています。基本的な検証のために、以下の2つの機能を実行しています。
両方のコアはIPCFを正しく実行するように設定されています。システムをデバッグモードで実行すると、LEDの点滅とPWMはどちらも正常に動作し、すべてが期待通りに動作します。しかし、電源を入れ直す(ボードの電源をオフ/オンする)と、何も実行されず、LEDの点滅もPWMも動作しません。
これまで試してみたことは次のとおりです。
共有メモリをクリアする方法は次のとおりです。
#IPCF_LOCAL_MEM_ADDR ((void *)0x20480000U) を定義します。
#IPCF_REMOTE_MEM_ADDR ((void *)0x20482000U) を定義します。
#IPCF_MEM_SIZE (0x2000U) を定義します
void clear_ipcf_shared_memory(void)
{
メモリセット(IPCF_LOCAL_MEM_ADDR, 0, IPCF_MEM_SIZE);
メモリセット(IPCF_REMOTE_MEM_ADDR, 0, IPCF_MEM_SIZE);
}
この問題の解決にご協力いただけませんか?参考までに、作業中のプロジェクトファイルも共有しました。
よろしくお願いします。
ガネーシュ・バグワット
こんにちは、ダニエル。
ご指導ありがとうございます。さらに調査を進めると、 startup_cm7.sファイルには共有メモリを初期化するためのセクションが含まれていますが、 #if defined(MULTIPLE_CORE) && defined(MULTIPLE_IMAGE)の下で条件付きでコンパイルされます。これらの定義を含むようにアセンブラ プリプロセッサを更新することで、問題を解決でき、電源を入れ直した後でも IPCF 初期化が正しく機能するようになりました。参考までに添付画像をご覧ください。
ご協力ありがとうございます!
よろしくお願いします、
ガネーシュ・バグワット
こんにちは@GaneshBhagwatさん、
SRAM ECC のドキュメントについては、S32K3xx リファレンス マニュアルとこの AN13388 のみがあります: https://www.nxp.com/webapp/Download?colCode=AN13388
ただし、任意の RTD サンプル プロジェクトを参照することはCAN。
SRAM ECC は起動コードで初期化されます。
よろしくお願いいたします。
ダニエル
こんにちは、ダニエル。
迅速なご対応に改めて感謝申し上げます。
参考までに、メモリ ビューのスクリーンショットを添付しました。1 つはデバッガーの起動直後に撮影したもので、もう 1 つは HardFault が発生したときに電源を入れ直した後にキャプチャしたものです。アドレス 0x20482008 には ?? が表示されませんが、この場所の値はデバッガー セッションと電源サイクル後とで異なることに気付きました。
今後とも変わらぬサポートを賜りますようお願い申し上げます。
よろしくお願いします、
ガネーシュ・バグワット
こんにちは@GaneshBhagwatさん、
この問題は初期化されていない SRAM ECC によって発生している可能性があります。
通常、SRAM ECC はデバッガーによって初期化されます。デバッガーを使用しない場合、アプリケーションは起動コードで ECC 初期化を処理する必要があります。これを行わないと、初期化されていないメモリにアクセスするときに ECC エラーが発生する可能性があります。
これを確認するには、メモリ ビューでアドレス 0x20482008 (正確なバス エラーの BFAR 値) のメモリをチェックしてみてください。その住所に?? が見えますか?
SO、初期化されていないメモリによる ECC 障害を示している可能性があります。
よろしくお願いいたします。
ダニエル
こんにちは、ダニエル。
迅速なご対応ありがとうございます。
ご提案通り再度確認しました。リセットせずにデバッガーを再接続すると、コードは関数 void clear_ipcf_shared_memory(void) 内でHardFaultになります。
ただし、clear_ipcf_shared_memory() の呼び出しをコメント アウトすると、今度は ipc_shm_init() 内でHardFaultが発生します。
参考までに、両方の HardFault シナリオのスクリーンショットを添付しました。
これらの障害の原因を理解し、問題を解決する方法を教えていただけますか?
よろしくお願いします、
ガネーシュ・バグワット
こんにちは@GaneshBhagwatさん、
デバッガーを (リセットせずに) 再度アタッチすると、ipc_shm_init() 内のルックでスタックしますか、それとも障害例外がありますか?