Переназначение памяти Stm32 cortex-m3

Сейчас работаю над stm32l152.

Моя таблица векторов загрузки находится на флэш-памяти 0x0800 0000, где есть действительный вектор обработчика сброса и указатель стека. Остальные векторы исключений/прерываний представляют собой просто бесконечные циклы. Затем я устанавливаю другую таблицу векторов в оперативной памяти, начиная с 0x2000 0000. В этой векторной таблице будут все необходимые векторы.

Моя проблема в том, что после перераспределения памяти для отображения 0x0000 0000 в 0x2000 0000, и когда мое прерывание срабатывает, кажется, что mcu все еще ищет векторы в 0x0800 0000. Я подтвердил это, изменив свой связанный вектор в таблице флэш-памяти на вектор в таблице оперативной памяти. Если связанный вектор флэш-таблицы указывает на бесконечный цикл, моя программа будет выполнять бесконечный цикл. Кроме того, я подтвердил правильность переназначения памяти, записав/прочитав некоторые ячейки памяти в 0x0000 0000, 0x0800 0000, 0x2000 0000.

Затем я использую другой метод изменения VTOR в микроконтроллере, чтобы сместить векторную таблицу на 0x2000 0000. Теперь это работает, и микроконтроллер найдет вектор в оперативной памяти. Обратите внимание, что в этом методе я не делал никакого перераспределения памяти.

Мой вопрос: могу ли я использовать переназначение памяти для перемещения моей векторной таблицы (без изменения VTOR)?

Какие еще варианты использования есть для переназначения памяти?

Могу ли я записать в 0x0000 0000 (сопоставленный с 0x0800 0000 флэш-памятью) и изменить флэш-память во время выполнения?


person foob    schedule 21.05.2014    source источник
comment
Как вы сделали переназначение памяти с первой попытки, когда не использовали SCB->VTOR?   -  person Multisync    schedule 28.01.2015
comment
Вопрос не уточнялся запрошенной информацией несколько лет - давайте закроем его.   -  person HelpingHand    schedule 30.05.2020


Ответы (1)


Вероятно, вы сделали это правильно с первой попытки. Однако функция SystemInit(), предоставляемая IDE, молча устанавливает VTOR = 0x8000000, поэтому таблица в начале флэш-памяти используется независимо от ваших настроек перераспределения памяти.

person Tagli    schedule 12.11.2020