Запуск нескольких приложений во флэш-памяти STM32 - PullRequest
5 голосов
/ 19 октября 2008

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

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

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

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

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

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

Обновление:

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

Ответы [ 3 ]

6 голосов
/ 20 октября 2008

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

1 голос
/ 01 апреля 2010

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

0 голосов
/ 23 июня 2009

Richard

Я пытался сделать то же, что и тебе, но у меня были проблемы. Я использовал IAR IDE и обновил файл * .icf (в каталоге «proj»), чтобы поместить мое приложение в 0x08002000, и загрузил отдельный проект в 0x08000000, который просто выполняет переход к адресу в векторе сброса в 0x08002004. Загрузочный код запустился и, похоже, переходит к запуску приложения, но когда-то во время инициализации IAR приложение завершилось ошибкой, в результате чего возникла ловушка ILLEGAL INSTRUCTION.

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

Ир.

...