STM32F4マイクロコントローラーの起動プロセスで理解できないことがいくつかあります。
私の理解は次のとおりです。
- ARMのCortex-M4のブーツは、スタックポインタの初期化値との割り込みベクタを期待
0x00000000 + SCB->VTOR
に対し、SCB->VTOR
リセット時にクリアされます。 - その場所にはメモリがありません。フラッシュメモリは
0x08000000
、SRAMはから始まり0x20000000
ます。 - ブートを可能にするために、µCはフラッシュまたはSRAMメモリ範囲をにマップできます
0x00000000
。マップされるメモリ範囲は、ブートピンの状態によって定義されます。
私の質問:
STM32F4リファレンスマニュアルの69ページで
デバイスがSRAMから起動する場合、アプリケーションの初期化コードで、NVIC例外テーブルとオフセットレジスタを使用して、SRAMのベクターテーブルを再配置する必要があります。
?私の見解では、メモリ領域全体がとにかくエイリアスされているため、これは必要ありません。興味深いことに、これはフラッシュ領域が
0x0
スペースに再マップされる場合は必要ないようです。SRAMからの起動の唯一の用途は、開発中のフラッシュの書き込みサイクルを減らすことだと私が考えることができます。µCをリセットから解放する前に、デバッガを使用してプログラムをSRAMに書き込み、そこから起動します。ただし、デバッガーにアクセスできるので、どこから起動するかについて制約はありません。では、なぜこの機能があるのでしょうか。
ブート位置がピンから派生していることは、(少なくとも私の意見では)この機能が開発中ではなく最終的な操作で使用されることを示しています。そして最後の操作では、SRAMは起動時にクリアされます。したがって、SRAMから起動しても意味がありません。