Запуск нескольких приложений во флэш-памяти STM32

StackOverflow https://stackoverflow.com/questions/216211

  •  03-07-2019
  •  | 
  •  

Вопрос

Я хотел бы иметь два приложения во флэш-памяти STM32: одно по сути является загрузочным, а другое - «основным».Я разобрался, как загрузить каждый из них в разные области флешки, и после снятия дампа памяти все выглядит как на своем месте.

Поэтому, когда я делаю сброс, он загружает загрузку, все, что в данный момент делает загрузка, — это переход к приложению.При отладке загрузки все работает правильно.Однако проблемы возникают после того, как я перешел к приложению, оно просто выполняет одну инструкцию (сборку), а затем возвращается к загрузке.Он должен оставаться в приложении на неопределенный срок.

Тогда у меня вопрос: куда мне следует «перейти» в приложении?

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

Надеюсь, это имеет смысл, если нет, я обновлю вопрос.

Спасибо за вашу помощь!Ричард

Обновления:

  • Я поигрался с отладчиком и вручную изменил счетчик программ на главный в приложении, и это сработало, поэтому я думаю, что с моим прыжком что-то не так, почему счетчик программ не продолжает работать? после прыжка?
  • На самом деле это похоже на PSR, буква «T» сбрасывается при прыжке, если я устанавливаю ее снова после прыжка, приложение продолжает работать по моему желанию.
  • Хорошо, решение найдено, кажется, вам нужно, чтобы младший разряд ПК был установлен в 1, когда вы выполняете ветку, иначе он перейдет в режим «ARM» (32-битная инструкция вместо 16-битных инструкций, как в режиме «большой палец»).Довольно неясная маленькая проблема, спасибо, что позволили мне поделиться ею с вами!
Это было полезно?

Решение

Убедитесь, что вы перешли по адресу, где младший бит равен 1.См. этот сайт для объяснения:http://www.embedded.com/columns/beginerscorner/15200241?_requestid=162471

Другие советы

Возможно, вы захотите найти IAP (программист внутри приложения), он позволяет загружать код из psort RS232 на stm32.Я начал использовать, и поскольку он предоставляет исходный код, его очень просто изменить для своих целей.в основном после сброса вы можете запрограммировать IAP для загрузки либо с адреса, скажем, 0x08002000, либо с адреса 0x08003000.тогда все, что вам нужно сделать, это установить флаг в коде вашего приложения, затем сказать «Перезапустить», и новое приложение запустится. Надеюсь, это поможет.

Ричард,

Я пытался сделать то же, что и ты, но у меня возникли проблемы.Я использовал IAR IDE и обновил файл *.icf (в каталоге «proj»), поместив свое приложение по адресу 0x08002000, и загрузил отдельный проект по адресу 0x08000000, который просто выполняет переход по адресу вектора сброса 0x08002004.Загрузочный код запустился и, похоже, перешел к запуску приложения, но в какой-то момент во время инициализации IAR приложение потерпело неудачу, что привело к ловушке НЕЗАКОННОЙ ИНСТРУКЦИИ.

Пройдя по шагам код приложения, я обнаружил, что забыл установить базовый адрес вектора прерывания на адрес приложения.Он все еще указывал на 0x08000000, и поэтому код сошел с ума.Добавление вызова для установки адреса вектора перед включением каких-либо прерываний решило мою проблему и требуется, если вы хотите перенести приложение во флэш-память.

Ира.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top