Easyelectronics.ru

Электроника для всех
Текущее время: 29 окт 2020, 22:06

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: BootLoader stm32, проблемы с переходами
СообщениеДобавлено: 22 апр 2012, 23:30 
Заглядывает иногда

Зарегистрирован: 22 апр 2012, 23:14
Сообщения: 53
Обьясните, пожалуйста, такие моменты в написании кода загрузчика, как переход по адресу, где записана загруженная программа.
Идея такая: после включения МК программнысчетчик попадает в бутлоадер, который записан в начале флешки по адресу 0х08000000. Код, записанный по этому адресу, проверяет, есть ли условие работы загрузчика. Если нет, нужно перейти по адресу, в начало которого бутлоадер пишет программу. Например 0х080010000.
Вопросы:
1.Как корректно перепрыгнуть на этот адресс?
Код
Код:
void (*JumptoApp)(void);

JumptoApp=(void(*)(void))0x08010000;   //адресс куда переходим
JumptoApp();

выбрасывает в Hard Fault Handler.
Это неправильно написанный переход по адресу или особенности железа?
2. Нужно ли переновитьс таблицу перерываний.Обязательно ли? Что будет, если ее не перенести?По какому адресу ее нужно перенести? И какой код должен осуществить перенос этой таблицы (бутлоадера или аппликэйшн).
Буду благодарна за подробное обьяснение алгоритма и предоставление кода перехода по адресу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BootLoader stm32, проблемы с переходами
СообщениеДобавлено: 22 апр 2012, 23:52 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 14 июл 2011, 01:36
Сообщения: 72
Откуда: Москва
Например так:
Код:
#define USER_PROG_OFFSET 0x1000
void jmp_user_prog(void) {
   /* Тут надо отключить ВСЮ перифкрию, которая использовалась бутлоаром. */

   NVIC_SetVectorTable(VectTab_FLASH, USER_PROG_OFFSET); // поправили адрес таблички прерываний
   (*(void(*)(void))(0x08000000+USER_PROG_OFFSET))();
}


Хотя адрес таблицы прерываний я бы поправлял в пользовательской программе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BootLoader stm32, проблемы с переходами
СообщениеДобавлено: 23 апр 2012, 01:28 
Заглядывает иногда

Зарегистрирован: 22 апр 2012, 23:14
Сообщения: 53
спасибо, теперь не выбрасывает в хард фолт, завтра попробую проверить на зашитой программе


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BootLoader stm32, проблемы с переходами
СообщениеДобавлено: 24 апр 2012, 18:54 
Заглядывает иногда

Зарегистрирован: 22 апр 2012, 23:14
Сообщения: 53
подскажите, пожалуйста, в функции перехода по адресу приложения от примера на AN2557 есть строчка
Код:
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) //Проверяем, есть ли что-нибудь по адресу (там должно лежать значение SP для приложения, его кладет линкер)
    {
      JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);  //Адрес перехода из вектора Reset
      Jump_To_Application = (pFunction) JumpAddress;                 //Указатель на функцию перехода
                      //Устанавливаем SP приложения
      Jump_To_Application();                                                       //Запускаем приложение
    }


__set_MSP(*(__IO uint32_t*) ApplicationAddress);
Почему на нее ругается линкер? Так же и на использование
__disable_interrupt();

Причем скачанный проект с сайта СТ компилируется и линкуется, а в своем ругается. Свой проект с функцией прилагаю.


Вложения:
MyBootLoaderV1.0Test.rar [25.32 Кб]
Скачиваний: 141
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB