Сейчас работаю над 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
флэш-памятью) и изменить флэш-память во время выполнения?
SCB->VTOR
? - person Multisync   schedule 28.01.2015