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

 
 
> 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
Ответов
EXeGLuMATOR
сообщение May 21 2012, 13:00
Сообщение #2


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

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



Отвлекся на другие дела...
Не совсем может понятно написал. В лоадере RL-ARM не используется. Там все просто. Камушек LPC1343. Используется встроенный HID - драйвер. По HID происходит обносвление основной прошивки. Потом соотв переход на неё. Из встроенной периферии используется помимо USB еще UART - для вывода сообщений. Ну GPIO еще. И собственно все.
Так вот, если заливать и стартовать основной код с адреса 0 - то он сам себя прекрасно перезапускает. Тестовый код тоже простой - ничего не инитится, только ЮАРТ - вывод строчки на терминал и далее - перезагрузка.
Следующий этап - через лоадер. Заливаем софтинку лоадером. Если простая тестовая софтинка - та-же что и впредыдущем этапе - все нормально. Все обновляется, запускается и выполняется переход на основной код. Там тоже все нормально.
Но как только появляется RL-ARM в пользовательском софте - все. Никаких движений после перехода на пользовательский софт. Стартапы одинаковые - тестовый проект сделан на базе основного, только урезан по максимуму.
Go to the top of the page
 
+Quote Post
EXeGLuMATOR
сообщение May 24 2012, 07:50
Сообщение #3


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

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



Ну как-же не признался. sm.gif Вот оно все. Было.

Цитата(EXeGLuMATOR @ May 21 2012, 17:00) *
Отвлекся на другие дела...
Не совсем может понятно написал. В лоадере RL-ARM не используется. Там все просто. Камушек LPC1343. Используется встроенный HID - драйвер. По HID происходит обносвление основной прошивки. Потом соотв переход на неё. Из встроенной периферии используется помимо USB еще UART - для вывода сообщений. Ну GPIO еще. И собственно все.
Так вот, если заливать и стартовать основной код с адреса 0 - то он сам себя прекрасно перезапускает. Тестовый код тоже простой - ничего не инитится, только ЮАРТ - вывод строчки на терминал и далее - перезагрузка.
Следующий этап - через лоадер. Заливаем софтинку лоадером. Если простая тестовая софтинка - та-же что и впредыдущем этапе - все нормально. Все обновляется, запускается и выполняется переход на основной код. Там тоже все нормально.
Но как только появляется RL-ARM в пользовательском софте - все. Никаких движений после перехода на пользовательский софт. Стартапы одинаковые - тестовый проект сделан на базе основного, только урезан по максимуму.


Вот - как-то так.

Аналогичные грабли были и на LPC2368. Но там разобрался.
Цитата
На LPC2368 - нужно было стартап править и таблицу SWI.
Здесь не пойму, что не так.

Может кто-нибудь startup_LPC13xx.s и SVC_Table.s от рабочих проектов с RL-ARM в качестве загружаемой софтины выложить?



Перерыл кучу форумов в том числе и и на Кейле - народ мается теми-же проблемами, но решения что-то не нашел.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 24 2012, 08:05
Сообщение #4


Гуру
******

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



QUOTE (EXeGLuMATOR @ May 24 2012, 10:50) *
Ну как-же не признался. sm.gif Вот оно все. Было.
Виноват. Пропустил. Могу посоветовать такой алгоритм:
1) запрещаете прерывания.
2) записываете в SCB->VTOR значение PAYLOAD_START_ADDR.
3) Записывате в MSP значение, взятое по адресу PAYLOAD_START_ADDR. (используйте функцию CMSIS __set_MSP())
4) Делаете переход таким образом:
CODE
    void (*user_code_entry)(void);
    user_code_entry = *((void (**)(void))(PAYLOAD_START_ADDR+4));
    user_code_entry();
Обратите внимание, что вы переходите не на адрес PAYLOAD_START_ADDR+4, а на адрес, который записан в ячейке с адресом PAYLOAD_START_ADDR+4. Ваши же примеры являют какую-то смесь из кода запуска для ARM (переход на первый адрес приложения, по которому располагается вектор исключения, представляющий из себя команду перехода) и кода для Cortex у которого вектор сброса расположен со смещением 4 байта (или sizeof(int)), но он представляет из себя не команду, а указатель. Поэтому очень сомнительно, что ваш предыдущий код хоть как-то работал.

Добавлено: похоже, не все кортексы-M3 одинаково одинаковые. Открыл мануал на 13xx, в нем нет упоминания про VTOR (хотя это часть ядра M3), зато есть упоминание про REMAP. Поищу еще, но, похоже, вам придется делать копирование векторов в ОЗУ и Remap.


--------------------
На любой вопрос даю любой ответ
"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
EXeGLuMATOR
сообщение May 24 2012, 08:30
Сообщение #5


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

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



Цитата(Сергей Борщ @ May 24 2012, 12:05) *
Виноват. Пропустил. Могу посоветовать такой алгоритм:
1) запрещаете прерывания.
2) записываете в SCB->VTOR значение PAYLOAD_START_ADDR.
3) Записывате в MSP значение, взятое по адресу PAYLOAD_START_ADDR. (используйте функцию CMSIS __set_MSP())
4) Делаете переход таким образом:
Код
    void (*user_code_entry)(void);
    user_code_entry = *((void (**)(void))(PAYLOAD_START_ADDR+4));
    user_code_entry();
Обратите внимание, что вы переходите не на адрес PAYLOAD_START_ADDR+4, а на адрес, который записан в ячейке с адресом PAYLOAD_START_ADDR+4. Ваши же примеры являют какую-то смесь из кода запуска для ARM (переход на первый адрес приложения, по которому располагается вектор исключения, представляющий из себя команду перехода) и кода для Cortex у которого вектор сброса расположен со смещением 4 байта (или sizeof(int)), но он представляет из себя не команду, а указатель. Поэтому очень сомнительно, что ваш предыдущий код хоть как-то работал.

Добавлено: похоже, не все кортексы-M3 одинаково одинаковые. Открыл мануал на 13xx, в нем нет упоминания про VTOR (хотя это часть ядра M3), зато есть упоминание про REMAP. Поищу еще, но, похоже, вам придется делать копирование векторов в ОЗУ и Remap.


Спасибо. Проверю. Еще вопросик - какие особенности при компиляции основной программы? С учетом RL-ARM? Ну, помимо адреса старта. sm.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- EXeGLuMATOR   RL-ARM и bootloader   May 3 2012, 09:01
- - jcxz   как делаете рестарт?   May 3 2012, 10:44
|- - EXeGLuMATOR   Цитата(jcxz @ May 3 2012, 14:44) как дела...   May 3 2012, 11:48
|- - _Артём_   Цитата(EXeGLuMATOR @ May 3 2012, 14:48) Р...   May 3 2012, 15:49
|- - 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
|- - net   QUOTE (EXeGLuMATOR @ May 21 2012, 17:00) ...   May 23 2012, 05:18
|- - Сергей Борщ   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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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