S32k324にブートローダー/アプリケーションのセットアップがあります。マップをスカベンジラムに変更する必要が生じるまでは、十分に動作しました。現時点ではcore0のみを使用しています。2 番目のコアは無効です。
リンカファイルが一致(ブートローダー(0x400000)とアプリケーション(0x420080))が一致していれば問題ありません。アプリケーションのフラッシュ(現在は0x420080)のオフセットを問題なく再定義できます。ブートローダーで使用される最初のsram / itcm / dtcm設定から逸脱して、無効になっているCore1のRAMを再利用すると、アプリケーションがハードエラーになります。ブートローダー(0x400000)オフセットからアプリケーションをロードすると、アプリケーションは新しいリンカファイルで正常に動作します。
問題の原因は何ですか?
アプリケーションのベースアドレスを0x400000に設定したとき。ロードして実行します。
アプリケーションのベースアドレスが 0x420080 に設定され、ブートローダーからジャンプすると、最初の使用時または初期化時にブートローダーによって初期化されなかったメモリにハード フォールトが発生します。
rasr レジスタと rbar レジスタを確認したところ、RAM で変更されていることがわかります。
また、'S32_MPU' 内の値が rasr と rbar の値で更新されているのも確認できますが、それらが実際に適用されているかどうかはわかりません。
しかし、メモリを再構成する前に、MPU(メモリ保護ユニット)はすでに有効になっているようです。次に、キャッシュを再度有効にする前に、MPUを有効にしようとします。
これらの値を変更する前に、MPU->CTRL[0]を0に設定する必要がありますか?データシートにはそれに関する参照を見つけることができませんでした。
はい、アプリケーションはSRAMメモリを再初期化できます。ただし、すでにブートローダーによって初期化されている場合は、不要な操作です。
ブートローダーが最初に実行された場合、アプリケーションがメモリを再初期化することは可能ですか?
私のスタートアップファイルは、どちらのアプリケーションでもS32K3_RTD_2_0_0_D2203_ASR_REL_4_4_REV_0000_20220331に基づいています。