inventor 0 20 октября, 2017 Опубликовано 20 октября, 2017 · Жалоба для своей проги сделал самозагрузчик который пишет образ с SD карты на flash с адреса 0x08008000 загрузчик проверил - работает, образ пишет проблема начинаетсяесли в качестве образа программа написанная для RTOS после инициализации оборудования вылетает в HardFault я прошел отладчиком и посмотрел что выпадает в том месте, когда я внутри программы работаю с внутренней flash (использую ее в режиме псевдо-EEPROM) делаю в IAR сморю Call Stack и вижу, что эксепшен вызвала функция PendSV_Handler мне не совсем понятно каким образом она вызывается я закоментировал то, где запускаются задачи и в самой первой функции hw_init_all() поставил бесконечный цикл моргания лампочкой но все равно происходит ексепшен даже если я в asm файле закоментировал вызов переключения контекстов она все равно сидит на B PendSV_Handler в файле startup_stm32f4xx.s вообще как то можно замаскировать это прерывание пока идет работа с flash ? и еще непонятно: если запускаю первый раз "из среды" то она не входит в точку останова PendSV а после ресета входит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 20 октября, 2017 Опубликовано 20 октября, 2017 · Жалоба пока сделал такую заплатку: перемещение векторов NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); сделал перед вызовом schedler все работает но хотелось бы вызывать перемещение векторов в функции hw_init_all() и там маскировать все перывания RTOS до тех пор пока не будут сделана инициализация всех вещей типа flash и прочей периферии тем более прерывания там не нужны /*vvvvv: Установим вектор на новое место */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); /* Запуск RTOS */ vTaskStartScheduler(); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 21 октября, 2017 Опубликовано 21 октября, 2017 · Жалоба У меня ремап векторов делает бутлоадер. Это его функциональная обязанность подготовить всё необходимое перед запуском прошивки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 21 октября, 2017 Опубликовано 21 октября, 2017 · Жалоба У меня ремап векторов делает бутлоадер. Это его функциональная обязанность подготовить всё необходимое перед запуском прошивки. в смысле в программе загрузчика вы перемещаете вектора? мне кажется это сама программа должна делать, чтобы она оставвалась независимой от него а так получается, что у вас программа состоит из 2-х зависимых частей Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 23 октября, 2017 Опубликовано 23 октября, 2017 · Жалоба Почему? Если программу загружает загрузчик - всё хорошо, если программа билдится как самостоятельная прошивка, то ей не требуется перенос векторов - всё хорошо. Данный подход не мешает применять и другие подходы. Если прошивка хочет переместить вектора - ей никто это сделать не помешает. Если мне потребуется какую-то старую прошивку адаптировать под бутлоадер я сделаю конфигурацию для линкера с нужным стартовым адресом флеша и памяти и в 99% всё заработает из коробки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться