Es gibt einige Dinge, die ich beim Startvorgang des STM32F4-Mikrocontrollers nicht verstehe.
Mein Verständnis ist wie folgt:
- Der ARM Cortex-M4-Start erwartet den Stapelzeiger-Initialisierungswert und die Interrupt-Vektoren an
0x00000000 + SCB->VTOR
, während erSCB->VTOR
beim Zurücksetzen gelöscht wird. - An diesem Ort ist kein Speicher vorhanden. Flash-Speicher beginnt um
0x08000000
, SRAM um0x20000000
. - Um das Booten zu ermöglichen, kann der µC den Flash- oder SRAM-Speicherbereich abbilden
0x00000000
. Der zuzuordnende Speicherbereich wird durch den Status der Boot-Pins definiert.
Meine Fragen:
Warum ist das STM32F4 Referenzhandbuch sagen , auf Seite 69 , dass
Wenn das Gerät vom SRAM startet, müssen Sie im Anwendungsinitialisierungscode die Vektortabelle im SRAM mithilfe der NVIC-Ausnahmetabelle und des Offset-Registers verschieben.
? Aus meiner Sicht ist dies nicht erforderlich, da der gesamte Speicherbereich ohnehin einen Alias aufweist. Interessanterweise scheint dies nicht erforderlich zu sein, wenn der Flash-Bereich dem
0x0
Speicherplatz neu zugeordnet wird.Die einzige Verwendung zum Booten von SRAM, die ich mir vorstellen kann, besteht darin, die Schreibzyklen auf dem Flash während der Entwicklung zu reduzieren. Bevor Sie das Zurücksetzen des µC freigeben, schreiben Sie das Programm mit dem Debugger in den SRAM und starten von dort aus. Da Sie jedoch über Debugger-Zugriff verfügen, gibt es ohnehin keine Einschränkungen hinsichtlich des Startorts. Warum also diese Funktion?
Dass die Boot-Position von Pins abgeleitet ist, zeigt (zumindest meiner Meinung nach) an, dass diese Funktion nicht während der Entwicklung, sondern im endgültigen Betrieb verwendet werden soll. Und im endgültigen Betrieb ist SRAM beim Booten klar. Daher ist es nicht sinnvoll, von SRAM zu booten.