реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Загрузчик + приложение (STM32F1XX+Keil)
Alex_1811
сообщение Jan 31 2014, 08:24
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 178
Регистрация: 31-10-06
Из: Яблунець
Пользователь №: 21 821



Ситуация следующая. Есть загрузчик который сидит по адресу 0x08000000 и основное приложения по адресу 0x8005000. Если я с бутлодера перехожу на 0x08000001 то вылетаю в HardFault_Handler. А если сразу на вектор Reset 0x8005101 то приложение работает нормально. Как правильно делать?
Go to the top of the page
 
+Quote Post
x893
сообщение Jan 31 2014, 08:48
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



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

Взять исходники любого из миллиарда бутлодеров и посмотреть код.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Jan 31 2014, 11:20
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



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

Откуда взялись такие адреса? Вы в курсе, что ARM 32 разрядный процессор а не 8 и у него соответственно адрес занимает 4 байта а не один.
Go to the top of the page
 
+Quote Post
Alex_1811
сообщение Jan 31 2014, 13:36
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 178
Регистрация: 31-10-06
Из: Яблунець
Пользователь №: 21 821



Цитата(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();
  }
}


Сообщение отредактировал Alex_1811 - Jan 31 2014, 13:38
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 31 2014, 21:04
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



переходите программным сбросом. Будете защищены от разных сюрпризов типа сработавших прерываний приложения или остатков его обменов по ПДП.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Feb 3 2014, 05:20
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Программным сбросом нужно переходить в загрузчик. А процедура перехода в приложение в любом случае должна присутствовать. Хотя я и не понял, что именно починил ТС.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016