S32K364 のデバッグ中に、ブートローダーがアプリにジャンプできないという問題が発生しました。
統合ブートローダデモ( https://community.nxp.com/t5/S32K-Knowledge-Base/Unified-bootloader-Demo/ta-p/1423099 )のジャンプ方法は以下のように参照されます。
デモでは:
图片1.png
アプリのエントリ アドレスは、関数 FLASH_HAL_GetRestHanlderInfo を使用して取得されます。
图片2.png
ここで使用されるマクロ定義は次のとおりです。
图片3.png
S32K364プロジェクトのリンカースクリプトファイルを確認し、構成を確認しました: APP_VECTOR_TABLE_OFFSET=8192
图片4.png
さらに、私のアプリケーション プロジェクトでは、appstart アドレスが 0x00432000 として構成されています。
图片5.png
アプリケーションによって生成される HEX ファイルのヘッダー情報は次のとおりです。
图片6.png
私が実装したジャンプ コードは次のとおりです。
图片7.png
操作に問題があったり、何か見落としがあったりする場合はお知らせください。
ご回答をお待ちしています。
直接実行すると(デバッグなし)、テストではジャンプが機能するようです。
ご返信ありがとうございます!ところで、あなたの出身地を教えていただけますか?
ジャンプ後にエラーは発生しませんでしたが、プログラムを一時停止すると、PC レジスタに 0x434a62 が表示されました。アプリのマップ ファイルを確認すると、プログラムが undefined_handler に入り、ここで停止したようです。
图片17.png
图片18.png
こんにちは。ご提案どおりにアプリ内の MPU を無効にしました。ジャンプ後にエラー メッセージは表示されませんでしたが、アプリは実行されていないようです。オシロスコープのピンから期待される方形波信号を確認できません。確認用にテスト プロジェクトを添付しました。
前回の返信で最初の質問に対応しましたが、ブートローダーがアプリにジャンプできない問題は既に解決されているようです。
新しい質問は MPU によって発生したようです。
アプリ プロジェクトを個別にテストしているときにこの問題が発生しましたか?
アプリで MPU を無効にしてから、もう一度試してください。
Senlent_0-1769653704239.png
それでも失敗する場合は、完了したテスト プロジェクトを提供してください。
ご返信ありがとうございます。送信されたコードを実行しましたが、まだエラーが発生したり問題が発生したりします。
图片11.png
スタックポイント = 0x434000
ジャンプアドレス = 0x434421
图片12.png
图片14.png
HEX ファイルと MAP ファイルをアップロードしました。添付ファイルから直接表示できます。
この問題はおそらく MPU の設定が必要ですか?ご協力をお待ちしております。
上記のデモコードを試してみて、それでも失敗する場合は、次の値を共有してください。
ジャンプアドレス、スタックポイント、ジャンプアドレス。
また、アプリのマップ ファイル内の Reset_Hanlder アドレス。
Reset_Handler のアドレスを取得しました:
图片8.png
图片9.png
より、resetHandle = 0x00434421U を変更します
图片10.png
しかし、新たな問題が浮上しました。
图片11.png
こんにちは、@ センレント、
ジャンプが必ずしも成功するとは限らないようです。ジャンプが失敗した場合、デバッガを使ってアタッチしてステータスを確認すると、プログラムが `undefined_handler(0x00434a62)` で停止していることがわかります。ジャンプ前に周辺機器を初期化したり、RAMをクリアしたりしてみましたが、状況は改善しませんでした。何か設定オプションを見落としているのでしょうか?
图片17.png
こんにちは@caigangwu
ジャンプする前に、すべての割り込みを無効にしてテストします。