Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с самозагрузчиком во freeRTOS
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
inventor
для своей проги сделал самозагрузчик
который пишет образ с 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
пока сделал такую заплатку:
перемещение векторов NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);
сделал перед вызовом schedler
все работает
но хотелось бы вызывать перемещение векторов
в функции hw_init_all()
и там маскировать все перывания RTOS
до тех пор пока не будут сделана инициализация всех вещей
типа flash и прочей периферии
тем более прерывания там не нужны

CODE

/*vvvvv: Установим вектор на новое место */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);


/* Запуск RTOS */
vTaskStartScheduler();
Kabdim
У меня ремап векторов делает бутлоадер. Это его функциональная обязанность подготовить всё необходимое перед запуском прошивки.
inventor
Цитата(Kabdim @ Oct 21 2017, 18:06) *
У меня ремап векторов делает бутлоадер. Это его функциональная обязанность подготовить всё необходимое перед запуском прошивки.


в смысле в программе загрузчика вы перемещаете вектора?
мне кажется это сама программа должна делать,
чтобы она оставвалась независимой от него
а так получается, что у вас программа состоит из 2-х зависимых частей
Kabdim
Почему? Если программу загружает загрузчик - всё хорошо, если программа билдится как самостоятельная прошивка, то ей не требуется перенос векторов - всё хорошо. Данный подход не мешает применять и другие подходы. Если прошивка хочет переместить вектора - ей никто это сделать не помешает. Если мне потребуется какую-то старую прошивку адаптировать под бутлоадер я сделаю конфигурацию для линкера с нужным стартовым адресом флеша и памяти и в 99% всё заработает из коробки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.