Загрузчик LPC1114 и пользовательское приложение используют одни и те же прерывания

#bootloader #cortex-m

#загрузчик #cortex-m

Вопрос:

Вторичный загрузчик для NXP LPC1114 / 5 Ссылка на приложение NXP примечание 10995 Необходимо использовать одинаковые прерывания в загрузчике и пользовательском приложении.

Согласно NXP AN10995, вектор int находится только в местоположении 0, и не доступен параметр смещения вектора, компенсирующий другой вектор int. Согласно примечанию к приложению, вторичный загрузчик должен перенаправить процессор на обработчик во флэш-памяти пользовательского приложения.

Проблема / вопрос, который у меня есть — флэш-память пользовательского приложения будет перезаписана во время обновления прошивки, поэтому там невозможно найти обработчик. Какой рекомендуемый подход, когда прерывание будет использоваться загрузчиком и пользовательским приложением.

Требуется ли для этого условное перенаправление в зависимости от запущенного приложения (загрузчик / пользовательское приложение), например: 1) если загрузчик запущен, перенаправьте на обработчик int в области загрузчика, 2) если пользовательское приложение запущено, перенаправьте на int. обработчик в пользовательском приложении или 3) использовать общую память между загрузчиком и пользовательским приложением?

Ответ №1:

Я закодировал много загрузчиков / обновлений прошивки. Если вы не можете изменить векторы прерываний, вам необходимо использовать опрошенный код, т.е.

  1. Скопируйте программу обновления прошивки в ОЗУ или убедитесь, что она находится в области ФЛЭШ-памяти, которая не будет удалена
  2. Вероятно, что настройка, скажем, UART уже настроена на использование прерываний, вам необходимо перенастроить все необходимое оборудование для использования методов опроса, т. Е. Без прерываний.
  3. Отключите прерывания!
  4. Перейдите к функции обновления прошивки
  5. Функция обновления прошивки не вернется, она будет запрашивать сообщения через UART и удалять, программировать, проверять флэш-раздел по запросу клиентского приложения. НЕ ВКЛЮЧАЙТЕ ПРЕРЫВАНИЯ!
  6. По завершении вы можете перезагрузить процессор с помощью сторожевого таймера, перезагрузить его и выполнить новый код.