Nano Hash - криптовалюты, майнинг, программирование

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

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

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

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

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

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

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

Обновления:

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

Ответы:


1

Убедитесь, что вы перешли на адрес, где LSB равен 1. См. Этот сайт для объяснения: https://www.embedded.com/introduction-to-arm-thumb/

20.10.2008
  • Ссылка на данный момент мертва, у вас есть обновленная? 05.10.2014
  • Исходную статью можно прочитать здесь - он по-прежнему актуален / действителен и доступен по обновленному URL-адресу: embedded. ru / Introduction-to-arm-thumb 21.07.2021

  • 2

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

    31.03.2010

    3

    Ричард,

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

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

    Ира.

    23.06.2009
    Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..