STM32 フラッシュに 2 つのアプリケーションが必要です。1 つは基本的にブートで、もう 1 つは「メイン」アプリケーションです。それぞれをフラッシュのさまざまな領域にロードする方法を見つけました。メモリ ダンプを取得した後、すべてが適切な場所にあるように見えます。
そのため、リセットを行うとブートがロードされ、現時点でブートが行うのはアプリケーションへのジャンプだけです。ブートをデバッグすると、これはすべて正しく機能しているように見えます。ただし、アプリケーションにジャンプした後に問題が発生し、1 つの命令 (アセンブリ) を実行しただけで、ブートに戻ります。アプリケーションに無期限に保持する必要があります。
私の質問は、アプリのどこに「ジャンプ」する必要があるかということです。
割り込みベクトル、リセット ハンドラー、アプリのメイン関数など、いくつかの潜在的なスポットがあるようです。実際、私はそれらすべてを試しましたが、成功しませんでした。
うまくいけば、それが理にかなっています。そうでない場合は、質問を更新します。
ご協力いただきありがとうございます!リチャード
アップデート:
- 私はデバッガーで遊んで、手動でプログラム カウンターをアプリケーションのメインに変更しましたが、それは魅力的に機能したので、ジャンプに何か問題があると思います。なぜプログラム カウンターが動かないのですか?ジャンプの後?
- 実際には PSR のようです。「T」はジャンプ時にリセットされます。ジャンプ後に再度設定すると、アプリは希望どおりに続行します
- わかりました解決策が見つかりました。分岐を行うとき、または「ARM」モードに入るときにPC LSBを1に設定する必要があるようです(「サム」モードのような16ビット命令ではなく32ビット命令。かなりあいまいな小さな問題、あなたと共有させてくれてありがとう!