#bootloader #cortex-m
#загрузчик #cortex-m
Вопрос:
Вторичный загрузчик для NXP LPC1114 / 5 Ссылка на приложение NXP примечание 10995 Необходимо использовать одинаковые прерывания в загрузчике и пользовательском приложении.
Согласно NXP AN10995, вектор int находится только в местоположении 0, и не доступен параметр смещения вектора, компенсирующий другой вектор int. Согласно примечанию к приложению, вторичный загрузчик должен перенаправить процессор на обработчик во флэш-памяти пользовательского приложения.
Проблема / вопрос, который у меня есть — флэш-память пользовательского приложения будет перезаписана во время обновления прошивки, поэтому там невозможно найти обработчик. Какой рекомендуемый подход, когда прерывание будет использоваться загрузчиком и пользовательским приложением.
Требуется ли для этого условное перенаправление в зависимости от запущенного приложения (загрузчик / пользовательское приложение), например: 1) если загрузчик запущен, перенаправьте на обработчик int в области загрузчика, 2) если пользовательское приложение запущено, перенаправьте на int. обработчик в пользовательском приложении или 3) использовать общую память между загрузчиком и пользовательским приложением?
Ответ №1:
Я закодировал много загрузчиков / обновлений прошивки. Если вы не можете изменить векторы прерываний, вам необходимо использовать опрошенный код, т.е.
- Скопируйте программу обновления прошивки в ОЗУ или убедитесь, что она находится в области ФЛЭШ-памяти, которая не будет удалена
- Вероятно, что настройка, скажем, UART уже настроена на использование прерываний, вам необходимо перенастроить все необходимое оборудование для использования методов опроса, т. Е. Без прерываний.
- Отключите прерывания!
- Перейдите к функции обновления прошивки
- Функция обновления прошивки не вернется, она будет запрашивать сообщения через UART и удалять, программировать, проверять флэш-раздел по запросу клиентского приложения. НЕ ВКЛЮЧАЙТЕ ПРЕРЫВАНИЯ!
- По завершении вы можете перезагрузить процессор с помощью сторожевого таймера, перезагрузить его и выполнить новый код.