Перейти к содержанию
    

Проблема с самозагрузчиком во freeRTOS

для своей проги сделал самозагрузчик

который пишет образ с SD карты на flash с адреса 0x08008000

загрузчик проверил - работает,

образ пишет

проблема начинаетсяесли в качестве образа

программа написанная для RTOS

после инициализации оборудования

вылетает в HardFault

я прошел отладчиком и посмотрел

что выпадает в том месте, когда я внутри программы работаю с

внутренней flash (использую ее в режиме псевдо-EEPROM)

делаю в IAR

сморю Call Stack и вижу, что эксепшен

вызвала функция PendSV_Handler

мне не совсем понятно каким образом она вызывается

я закоментировал то, где запускаются задачи

и в самой первой функции hw_init_all()

поставил бесконечный цикл моргания лампочкой

но все равно происходит ексепшен

даже если я в asm файле закоментировал вызов

переключения контекстов

она все равно сидит на B PendSV_Handler

в файле startup_stm32f4xx.s

вообще как то можно замаскировать это прерывание

пока идет работа с flash ?

и еще непонятно:

если запускаю первый раз "из среды"

то она не входит в точку останова PendSV

а после ресета входит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пока сделал такую заплатку:

перемещение векторов NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);

сделал перед вызовом schedler

все работает

но хотелось бы вызывать перемещение векторов

в функции hw_init_all()

и там маскировать все перывания RTOS

до тех пор пока не будут сделана инициализация всех вещей

типа flash и прочей периферии

тем более прерывания там не нужны

 

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


   /* Запуск RTOS */
   vTaskStartScheduler();

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня ремап векторов делает бутлоадер. Это его функциональная обязанность подготовить всё необходимое перед запуском прошивки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня ремап векторов делает бутлоадер. Это его функциональная обязанность подготовить всё необходимое перед запуском прошивки.

 

в смысле в программе загрузчика вы перемещаете вектора?

мне кажется это сама программа должна делать,

чтобы она оставвалась независимой от него

а так получается, что у вас программа состоит из 2-х зависимых частей

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему? Если программу загружает загрузчик - всё хорошо, если программа билдится как самостоятельная прошивка, то ей не требуется перенос векторов - всё хорошо. Данный подход не мешает применять и другие подходы. Если прошивка хочет переместить вектора - ей никто это сделать не помешает. Если мне потребуется какую-то старую прошивку адаптировать под бутлоадер я сделаю конфигурацию для линкера с нужным стартовым адресом флеша и памяти и в 99% всё заработает из коробки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...