Я написал загрузчик, чтобы перейти в мое приложение. Сначала я попытался с помощью простого мигающего приложения => Я могу перейти в приложение из загрузчика.Проблема с загрузчиком STM32F2
Теперь я хочу прыгнуть в свое настоящее приложение. Приложение работает хорошо в одиночку, но, когда я прыгаю в него из моего загрузчика приложение аварии, как только прерывания разрешены, мой код прыжков:
__disable_irq();
SCB->VTOR = (uint32_t)0x0800BA00;
JumpAddress = *(__IO uint32_t*) (0X0800BA04);
JumpToApplication = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) 0X0800BA00);
JumpToApplication();
Я не знаю, что это неправильно и почему активация прерывания разбивают приложение.
Спасибо за вашу помощь
Благодарим вас за ответ. Я отключил все периферийные и связанные прерывания. Мне также нужно сбросить их, как вы предлагаете? Я также подменяю общие прерывания перед прыжком. В SystemInit() я уже установил VECT_TAB_OFFSET в 0xBA00. Это не работает, когда приложение активирует прерывания. Есть ли у вас другая идея? Что касается адреса, я уверен, что это хороший, я пишу файл приложения-компоновщика, чтобы соответствовать этому адресу. – caius
@caius - вы можете поручить компоновщику разместить ваше приложение на 0x800ba00, но имейте в виду, что мигание этого приложения на этот адрес приведет к стиранию памяти с 0x8008000 (32kB). Если он все еще не работает, то я думаю, вы должны попытаться отладить свою проблему - проверьте значения соответствующих регистров, посмотрите, что именно происходит «сбой» («не работает должным образом» или «перескакивает в жесткую ошибку» или sth другое) и т. д. –
Еще раз спасибо за ваше время. Я попытаюсь отладить его, но я не уверен, как это сделать после перехода в приложение. Что касается адреса, я стираю с 0x8008000, как вы предлагаете. Чтобы понять, не стирают ли я его, каковы риски? – caius