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

 
 
> RL-ARM и bootloader, Запуск основной программы после перепрошивки
EXeGLuMATOR
сообщение May 3 2012, 09:01
Сообщение #1


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

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



Имеется следующий проектик, как водится, состоящий из двух частей. Бутлоадер и основная программа. Причем в основной программе также есть блок перепрошивки "самой себя".
Используется RL-ARM.
Вопрос в следующем - как после перпрошивки перезапустить проц? Собсно как перезапустить более или менее понятно. Проблема в том, что после перезапуска все уходит в HardFault при вызове os_sys_init().
Т.е. перешиваемся, рестартуем, код запускается, но как только доходит до инита операционки - вылет.
Кто знает, как это победить?

Компилятор ессно Keil. sm.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение May 3 2012, 10:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



как делаете рестарт?
Go to the top of the page
 
+Quote Post
EXeGLuMATOR
сообщение May 3 2012, 11:48
Сообщение #3


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

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



Цитата(jcxz @ May 3 2012, 14:44) *
как делаете рестарт?


А по всякому пробовал. Благо вариантов в ветке представлено. sm.gif
И так:
Код
        static const uint16_t code[] =
        {
                0xF850, 0xDB04, // LDR.W SP, [R0], #4  
                0x6800,         // LDR.W R0, [R0]      
                0x4700,         // BX R0                
        };
        ((void (*)(uint32_t))(1 + (int)code))(PAYLOAD_START_ADDR);


И так:
Код
  typedef  void (*pFunction)(void);
  pFunction Jump_To_Application;
  uint32_t JumpAddress;
    
   void (*user_code_entry)(void);
    user_code_entry = ((void (*)(void))(PAYLOAD_START_ADDR+4));
    user_code_entry();


И так, что в общем идентично предыдущему, но без смещения:
Код
void execute_user_code(void)
{
    void (*user_code_entry)(void);
    user_code_entry = (void (*)(void))USER_START_SECTOR_ADDRESS;
    user_code_entry();
}


Результат один. Перезапуск удается, код запускается, инитится вся периферия, но как только дело доходит до запуска непосредственно оси функцией os_sys_init(TaskInit); - все вылетает в HARD Fault Handler. Причем изначально все запускается и работает без нареканий. Программа скомпилирована, заружена и запущена без лоадера, с адреса 0. В качестве эксперимента просто пытаюсь рестартовать проц из самой проги. Потом уже все остальное. На 23хх процах была подобная фигня при перезагрузке лоадером - вылечилось дефайнами RAM_INTVEC RAM_MODE REMAP. Сейчас не проходит. Где-то что-то упускаю. sad.gif
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 3 2012, 15:49
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(EXeGLuMATOR @ May 3 2012, 14:48) *
Результат один. Перезапуск удается, код запускается, инитится вся периферия, но как только дело доходит до запуска непосредственно оси функцией os_sys_init(TaskInit); - все вылетает в HARD Fault Handler. Причем изначально все запускается и работает без нареканий. Программа скомпилирована, заружена и запущена без лоадера, с адреса 0. В качестве эксперимента просто пытаюсь рестартовать проц из самой проги. Потом уже все остальное. На 23хх процах была подобная фигня при перезагрузке лоадером - вылечилось дефайнами RAM_INTVEC RAM_MODE REMAP. Сейчас не проходит. Где-то что-то упускаю. sad.gif

У вас в boot-е используется Systick?
Может bootloader создаёт дополнительную задержку и происходит прерывание таймера SysTick раньше чем ОСь проинициализировалась?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- EXeGLuMATOR   RL-ARM и bootloader   May 3 2012, 09:01
|- - jcxz   Цитата(EXeGLuMATOR @ May 3 2012, 17:48) А...   May 4 2012, 01:54
- - AlexandrY   Цитата(EXeGLuMATOR @ May 3 2012, 12:01) Т...   May 3 2012, 17:18
- - Sanya_kv   EXeGLuMATOR А какое ядро Вы используете ARM 7 или ...   May 4 2012, 05:35
- - EXeGLuMATOR   Отвлекся на другие дела... Не совсем может понятно...   May 21 2012, 13:00
|- - net   QUOTE (EXeGLuMATOR @ May 21 2012, 17:00) ...   May 23 2012, 05:18
|- - EXeGLuMATOR   Ну как-же не признался. Вот оно все. Было. Цита...   May 24 2012, 07:50
|- - Сергей Борщ   QUOTE (EXeGLuMATOR @ May 24 2012, 10:50) ...   May 24 2012, 08:05
|- - EXeGLuMATOR   Цитата(Сергей Борщ @ May 24 2012, 12:05) ...   May 24 2012, 08:30
|- - Сергей Борщ   QUOTE (Сергей Борщ @ May 24 2012, 11:05) ...   May 24 2012, 08:50
- - EXeGLuMATOR   Да может и явный ляп. Понять-бы где. На LPC2368 - ...   May 23 2012, 11:41
|- - jcxz   Не очень понятно - зачем упорно пытаться сделать с...   May 24 2012, 02:14
|- - EXeGLuMATOR   Цитата(jcxz @ May 24 2012, 06:14) Не очен...   May 24 2012, 04:34
|- - Сергей Борщ   QUOTE (EXeGLuMATOR @ May 24 2012, 07:34) ...   May 24 2012, 05:47
|- - EXeGLuMATOR   Цитата(Сергей Борщ @ May 24 2012, 09:47) ...   May 24 2012, 05:58
|- - jcxz   Цитата(EXeGLuMATOR @ May 24 2012, 11:58) ...   May 24 2012, 06:52
|- - Сергей Борщ   QUOTE (jcxz @ May 24 2012, 09:52) Как пол...   May 24 2012, 07:14
- - EXeGLuMATOR   Да, сурово. Повелся на экономию места и цену. И ка...   May 24 2012, 10:20
|- - Сергей Борщ   QUOTE (EXeGLuMATOR @ May 24 2012, 13:20) ...   May 24 2012, 11:30
- - EXeGLuMATOR   Урррааа! Заработало. Большое спасибо! Дума...   May 25 2012, 08:46


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

 


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


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