Есть некоторые вещи, которые я не понимаю в процессе загрузки микроконтроллера STM32F4.
Мое понимание таково:
- Загрузки ARM Cortex-M4 ожидают, что значение инициализации указателя стека и векторы прерываний включены
0x00000000 + SCB->VTOR
, тогдаSCB->VTOR
как очищается при сбросе. - Там нет памяти в этом месте. Флэш-память начинается с
0x08000000
, SRAM в0x20000000
. - Чтобы сделать возможной загрузку, микроконтроллер может сопоставить диапазон памяти флэш-памяти или SRAM
0x00000000
. Диапазон памяти для отображения определяется состоянием загрузочных штифтов.
Мои вопросы:
Почему в справочном руководстве STM32F4 на стр. 69 говорится, что
Когда устройство загружается из SRAM, в коде инициализации приложения необходимо переместить таблицу векторов в SRAM, используя таблицу исключений NVIC и регистр смещения.
? На мой взгляд, в этом нет необходимости, поскольку вся область памяти в любом случае перекрывается. Интересно, что это не требуется, когда область флэш-памяти переназначается в
0x0
пространство.Я думаю, что единственное использование для загрузки из SRAM - это сокращение циклов записи на флэш-память во время разработки. Прежде чем освободить микроконтроллер от сброса, вы записываете программу в SRAM с помощью отладчика и затем загружаетесь оттуда. Однако, поскольку у вас есть доступ к отладчику, никаких ограничений на загрузку не будет. Так зачем иметь эту функцию?
То, что позиция загрузки определяется по выводам, указывает (по крайней мере, на мой взгляд), что эта функция должна использоваться не во время разработки, а в финальной операции. И в последней операции SRAM очищается во время загрузки. Следовательно, нет смысла загружаться с SRAM.