Всем привет. Кто ни будь догадался как в принципе использовать ITCM? Как я понял это обычный Executable SRAM с быстрым доступом (0 wait state). Как я предполагаю-у, я должен скомпилировать код под область ITCM, но залить его как Data блок во Flash, затем моё пользовательское приложение должно перенести этот Data блок из Flash в ITCM и... передать управление? Или я чо-то недопер?
Помощь зала попрошу. Проц. STM32H750. Во флеш расположен только свой загрузчик и больше ничего. Загрузчик принимает рабочую прошивку по UART и кладет её в RAM D1.
Рабочая программа - отдельный проект, подразумевается работа без флеш. Собирается с STM32H750VBTX_RAM.ld и в отладчике работает.
Всё в сборе - не работает переход от загрузчика к рабочей программе. Где виснет непонятно, отладку запускаю в проекте загрузчика, загрузчик свое отрабатывает и после перехода в основную программу все виснет. Адрес запуска основной программы беру из её HEX , типа такого : #define APPLICATION_ADDRESS 0x24003500UL В отладке видно, что PC и SP изменились, но дальше пошаговая не работает.
Может, у кого есть работающий вариант перехода для H7?
в ld файле RAM_EXEC (xrw) : ORIGIN = 0x24000000, LENGTH = 512K всё там сейчас - и программа и все данные. Стек в DTCMRAM. Если запускаю отладчиком в RAM, то всё работает. Если загружаю загрузчиком HEX ->BIM и в ОЗУ с 0x24000000, и запускаю с адреса старта программы, то не работает Когда запускаю отладчиком в RAM, потом выхожу из отладки и подключаюсь отладкой в конфигурации "БЕЗ ЗАГРУЗКИ" то работает. Если подключусь отладкой без загрузки к тому , ч то флеш загрузчик перенес, то отладка тоже не то показыват.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Посмотрите листинг во что компилируется вызов JumpToApplication(); Былт недавно. После того как вы стек передвинули он продолжал использоваться и всё падало.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Если подключусь отладкой без загрузки к тому , ч то флеш загрузчик перенес, то отладка тоже не то показыват.
Не понимаю проблемы... Отладчик вроде имеется. Почему тогда просто не отладить им - не найти где именно стопорится? Зачем без толку продолжать пинать колёса? Скорее всего (имхо) ваша рабочая программа начинает работать с периферией (инитить её) в расчёте на то, что регистры периферии содержат дефолтные значения (послесбросовые). А ваш загрузчик уже что-то записал в какой-то регистр и не восстановил дефолтное. С помощью отладчика такое находится на раз.
дело за малым - подключить отладчик после загрузки кода загрузчиком.
/* * ARM clearly says that changing the VTOR requires a DSB after it * and changing the stack pointer requires an ISB after it. */ Вот с этим вроде как заработало.
и вот это еще: // Make sure, the CPU is in privileged mode. #define EnablePrivilegedMode() __asm("SVC #0"); if( CONTROL_nPRIV_Msk & __get_CONTROL( ) ) { /* not in privileged mode */ EnablePrivilegedMode(); }
Ну так и есть, как я и говорил - проблема в вашем "загрузчике". Кривой он. Загрузчик, перед передачей управления загруженной программе, должен ВСЕ регистры CPU и периферии перевести в начальное (послесбросовое) состояние. Ваш загрузчик значит этого не делает.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения