こんにちは 、
私はs32k358マルチコアで共有メモリを使用しようとしています。
私はユーザー定義の例に従っています。
buzzer_state_shared_data_U32で値を割り当てようとすると(現在はコア0のみがこのメモリにアクセスしています)、コア0がハングし、SWTがコントローラーをリセットします。
しかし、デバッグフラッシュにコードを書き込むと、正常に動作します。電源リセット後、コア0がハングアップしています。
フラッシュ中は正常に動作するのに、電源のオンオフでは動作しないのはなぜですか?
こんにちは、 @Julián_AragónM さん、
迅速なご対応ありがとうございます。
起動ファイルを確認したところ、SRAMの初期化が実行されている。
起動ファイルとリンカーファイルを添付しました。この問題を解決するために、ぜひ私をサポートしてください
こんにちは、 @nirmal_masilamani さん、
しかし、デバッグフラッシュにコードを書き込むと、正常に動作します。電源リセット後、コア0がハングアップしています。
これはおそらくECC RAMのエラーが原因です。通常、デバッガは揮発性メモリ上でECCを初期化しますが、電源オン・オフ時にRAMを初期化せず、メモリへのアクセス時にハードフォールトが発生します。
これは通常、メイン関数の前に実行される起動コード内で行われます。
このセクションはキャッシュ不可に設定する必要があります。
2つ目の問題についてですが、タイマーISRやOSタスクからアクセスしようとすると、コア0がハードフォールに切り替わります。
ハードフォルトを遡って追跡してみることもできます。HardFault_Handler()でコアを停止し、コアレジスタでSP値を見つけます:How To Debug A Fault Exception On ARM Cortex-M(V7M) MCU(S32K3XX)。
よろしくお願いします、
ジュリアン
こんにちは、
main()で共有メモリにアクセスすると、電源オフ・オンでも問題なく動作しますが、タイマーISRやOSタスクからアクセスしようとすると、コア0がハードフォールに切り替わります。
どうか私をサポートしてください。
こんにちは、 @Julián_AragónM さん、
この質問についてサポートしてください。私が何か見落としているのでしょうか?
こんにちは、 @nirmal_masilamani さん、
PORリセット後にデバッガなしでmain()の共有メモリにアクセスできますか?問題はRAMの初期化だったのでしょうか?
しかし、タイマー、ISR、OSタスクからアクセスしようとすると、コア0がハードフォールトに切り替わります。
前回の返信でお伝えしたように、故障の種類を特定できましたか?
変数がキャッシュされない領域に配置されているか、またはキャッシュが無効になっていることを確認しましたか?
提案として:
core1Status を揮発性のままにしておき、読み取り側 (Core0) と書き込み側 (Core1) の両方で__DMB()/__ DSB() バリアを使用します。
問題がMPU設定が原因かもしれません。もし定義MPU_ENABLEなら、ISRやOSタスクが実行される前にMPU設定を呼び出してください。
以下のリンクを参照してください:Arm Cortex-M7 デバイス汎用ユーザーガイド r1p2 & AN14715: S32K3XX ハードウェアリソースのアイソレータと保護。
よろしくお願いします、
ジュリアン