Stm32 Cortex-M3 переназначение памяти

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

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

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

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

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

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

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

0 ответов

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

Другие вопросы по тегам