Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Загрузчик + приложение (STM32F1XX+Keil)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Alex_1811
Ситуация следующая. Есть загрузчик который сидит по адресу 0x08000000 и основное приложения по адресу 0x8005000. Если я с бутлодера перехожу на 0x08000001 то вылетаю в HardFault_Handler. А если сразу на вектор Reset 0x8005101 то приложение работает нормально. Как правильно делать?
x893
Цитата(Alex_1811 @ Jan 31 2014, 12:24) *
Ситуация следующая. Есть загрузчик который сидит по адресу 0x08000000 и основное приложения по адресу 0x8005000. Если я с бутлодера перехожу на 0x08000001 то вылетаю в HardFault_Handler. А если сразу на вектор Reset 0x8005101 то приложение работает нормально. Как правильно делать?

Взять исходники любого из миллиарда бутлодеров и посмотреть код.
vlad_new
Цитата(Alex_1811 @ Jan 31 2014, 12:24) *
Ситуация следующая. Есть загрузчик который сидит по адресу 0x08000000 и основное приложения по адресу 0x8005000. Если я с бутлодера перехожу на 0x08000001 то вылетаю в HardFault_Handler. А если сразу на вектор Reset 0x8005101 то приложение работает нормально. Как правильно делать?

Откуда взялись такие адреса? Вы в курсе, что ARM 32 разрядный процессор а не 8 и у него соответственно адрес занимает 4 байта а не один.
Alex_1811
Цитата(vlad_new @ Jan 31 2014, 15:20) *
Откуда взялись такие адреса? Вы в курсе, что ARM 32 разрядный процессор а не 8 и у него соответственно адрес занимает 4 байта а не один.

А вы гляньте таблицу векторов
Код
Reset_Handler                            0x08005101   Thumb Code     4  stm32f10x.o(.text)
NMI_Handler                              0x08005105   Thumb Code     2  stm32f10x.o(.text)
MemManage_Handler                        0x08005109   Thumb Code     2  stm32f10x.o(.text)
BusFault_Handler                         0x0800510b   Thumb Code     2  stm32f10x.o(.text)
UsageFault_Handler                       0x0800510d   Thumb Code     2  stm32f10x.o(.text)


ПС. Вопрос закрыт
Код
void JumpToApplication(Int32U addr)
{
  typedef  void (*pFunction)(void);
  pFunction Jump_To_Application;
  Int32U JumpAddress;
  if(addr>=0x08005000)
  {
    JumpAddress = *(Int32U*) (addr + 4);
    Jump_To_Application = (pFunction) JumpAddress;
    /* Initialize user application's Stack Pointer */
    __MSR_MSP(*(vu32*) addr);
    Jump_To_Application();
  }
}
Сергей Борщ
переходите программным сбросом. Будете защищены от разных сюрпризов типа сработавших прерываний приложения или остатков его обменов по ПДП.
andrewlekar
Программным сбросом нужно переходить в загрузчик. А процедура перехода в приложение в любом случае должна присутствовать. Хотя я и не понял, что именно починил ТС.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.