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

 
 
> Ещё раз о бутлоадере, Некоторые тонкости.
SasaVitebsk
сообщение Oct 4 2007, 09:17
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Задумка такая.

По старту попадаем в бут. Там считаем CRC и если Ok - выходим на саму приложение. Если не Ok то переходим на сам лодырь.

В приложении по команде переходим непосредственно на лоадырь.


То есть мне надо две точки входа. По сбросу и по команде. Хотелось бы использовать незадействованные вектора бутлоадера. Например +2. Как это сделать. Если использовать pragma location, то наверняка будет linker ругаться.

Конечно можно упростить задачу и использовать какой нибудь признак в EEPROM. Или портить CRC к примеру, но что-то мне не нравится такой подход.

А кто как делает?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Oct 4 2007, 09:37
Сообщение #2


Гуру
******

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



Цитата(SasaVitebsk @ Oct 4 2007, 12:17) *
Хотелось бы использовать незадействованные вектора бутлоадера. Например +2. Как это сделать. Если использовать pragma location, то наверняка будет linker ругаться.
Конечно можно упростить задачу и использовать какой нибудь признак в EEPROM. Или портить CRC к примеру, но что-то мне не нравится такой подход.
Есть некая нога, которую приложение всегда настраивает на вывод. Например выход USART или нога, на которой висит светодиод. После сброса все порты гарантировано настроены на ввод. Значит, используюя даже одну точку входа по направлению этой ноги можем судить - мы попали по сбросу или по переходу из приложения. По второму вопросу: в коде пишем
Код
extern void BootLoader();
В командной строке линкера добавляем -DBootLoader=0x1800 или в .xcl дописываем -DBootLoader=0x1800. Все. в приложении делаем dir_out(MANUAL_PROG); __disable_interrupt(); BootLoader();
На всякий случай в __low_level_init() лодыря сразу же запретить прерывания и переключить вектора на лодырь (если используются).


--------------------
На любой вопрос даю любой ответ
"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
IJAR
сообщение Oct 9 2007, 11:40
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669



Цитата(Сергей Борщ @ Oct 4 2007, 13:37) *
Есть некая нога, которую приложение всегда настраивает на вывод. Например выход USART или нога, на которой висит светодиод. После сброса все порты гарантировано настроены на ввод. Значит, используюя даже одну точку входа по направлению этой ноги можем судить - мы попали по сбросу или по переходу из приложения.


А какой смысл возврата в BootLoader из приложения?
Как я понимаю, по Reset всегда на BL а далее разбор:
пользоваться ли его услугами или сразу перейти к выполнению приложения.
Может я что-то "не догоняю".


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 9 2007, 12:01
Сообщение #4


Гуру
******

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



Цитата(IJAR @ Oct 9 2007, 14:40) *
А какой смысл возврата в BootLoader из приложения?
Чтобы обновлять ПО по команде извне по интерфейсу связи. Это удобно как для устройств, находящихся в труднодоступных местах, так и для устройств на столе - для перепрошивки их не нужно вскрывать чтобы замкнуть джампер. Протокол связи поддерживается приложением, оно получает команду "обновление", передает управление в загрузчик, загрузчик формирует ответ "к загрузке готов" в соответствии с протоколом связи. Если же мы стартанули загрузчик принудительно или приложения нет/не сошлась контрольная сумма, то загрузчик сам ожидает команду "обновление" (и это единственная команда из всего протокола, которая в нем реализована).


--------------------
На любой вопрос даю любой ответ
"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
IJAR
сообщение Oct 9 2007, 12:33
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669



Цитата(Сергей Борщ @ Oct 9 2007, 16:01) *
Чтобы обновлять ПО по команде извне по интерфейсу связи. Это удобно как для устройств, находящихся в труднодоступных местах, так и для устройств на столе - для перепрошивки их не нужно вскрывать чтобы замкнуть джампер. Протокол связи поддерживается приложением, оно получает команду "обновление", передает управление в загрузчик, загрузчик формирует ответ "к загрузке готов" в соответствии с протоколом связи. Если же мы стартанули загрузчик принудительно или приложения нет/не сошлась контрольная сумма, то загрузчик сам ожидает команду "обновление" (и это единственная команда из всего протокола, которая в нем реализована).

Логично! beer.gif
Но есть один недостаток: приложение должно поддерживать протокол (иметь возможно лишний программный код) . А если приложение пишет другой программист, не разработчик BL или вообще
в другой конторе (например у потребителя устройства). Ему же надо все описать, что он должен сделать.


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SasaVitebsk   Ещё раз о бутлоадере   Oct 4 2007, 09:17
|- - Сергей Борщ   Цитата(IJAR @ Oct 9 2007, 15:33) Но есть ...   Oct 9 2007, 14:33
- - SasaVitebsk   Спасибо Сергей. Всё доступно объяснил. Подходят о...   Oct 4 2007, 19:14
- - arttab   а почему бы не объявить переменную в озу в загрузч...   Oct 7 2007, 14:34
|- - Сергей Борщ   Цитата(arttab @ Oct 7 2007, 17:34) В загр...   Oct 8 2007, 08:16
- - IJAR   Цитата(SasaVitebsk @ Oct 4 2007, 13:17) З...   Oct 9 2007, 07:28
|- - Сергей Борщ   Цитата(IJAR @ Oct 9 2007, 10:28) 1. Испол...   Oct 9 2007, 10:45
- - SasaVitebsk   Сергей, всётаки по коду не уложился в 2к. Со своим...   Oct 9 2007, 23:55
|- - Сергей Борщ   Цитата(SasaVitebsk @ Oct 10 2007, 02:55) ...   Oct 10 2007, 10:58
|- - SasaVitebsk   Цитата(Сергей Борщ @ Oct 10 2007, 13:58) ...   Oct 10 2007, 13:35
|- - Сергей Борщ   Цитата(SasaVitebsk @ Oct 10 2007, 16:35) ...   Oct 10 2007, 15:46
||- - Dog Pawlowa   Цитата(Сергей Борщ @ Oct 10 2007, 18:46) ...   Oct 10 2007, 16:42
||- - Сергей Борщ   Цитата(Dog Pawlowa @ Oct 10 2007, 19:42) ...   Oct 10 2007, 16:57
|- - singlskv   Цитата(SasaVitebsk @ Oct 10 2007, 17:35) ...   Oct 16 2007, 18:01
|- - Сергей Борщ   Цитата(singlskv @ Oct 16 2007, 21:01) Ста...   Oct 17 2007, 09:56
- - SasaVitebsk   Код 2 106 bytes of CODE memory 1 430 bytes of D...   Oct 11 2007, 09:07
- - Waso   Извиняюсь что лезу в чужую тему, но есть дилетантс...   Oct 12 2007, 08:36
|- - Сергей Борщ   Цитата(Waso @ Oct 12 2007, 11:36) Я плани...   Oct 12 2007, 11:04
- - Waso   Спасибо за совет! Нашел апноты. Изучаю. Safe ...   Oct 15 2007, 07:02
- - SasaVitebsk   Ещё один вопрос, напрямую с бутлоадером не связанн...   Oct 16 2007, 10:28
|- - Сергей Борщ   Цитата(SasaVitebsk @ Oct 16 2007, 13:28) ...   Oct 16 2007, 12:51
|- - IgorKossak   Цитата(Сергей Борщ @ Oct 16 2007, 15:51) ...   Oct 16 2007, 20:32
- - SasaVitebsk   Спасибо, но я не планирую запрещать локи на чтение...   Oct 16 2007, 16:47
- - SasaVitebsk   2 singlskv. Не планирую переходить на GCC. Работы ...   Oct 16 2007, 20:58
|- - singlskv   Цитата(SasaVitebsk @ Oct 17 2007, 00:58) ...   Oct 17 2007, 20:29
|- - zltigo   Цитата(singlskv @ Oct 17 2007, 23:29) то ...   Oct 17 2007, 20:47
||- - singlskv   Цитата(zltigo @ Oct 18 2007, 00:47) Т.е. ...   Oct 17 2007, 20:57
||- - zltigo   Цитата(singlskv @ Oct 17 2007, 23:57) Опя...   Oct 17 2007, 21:12
||- - singlskv   Цитата(zltigo @ Oct 18 2007, 01:12) Конте...   Oct 17 2007, 21:53
||- - zltigo   Цитата(singlskv @ Oct 18 2007, 00:53) Ско...   Oct 17 2007, 22:04
||- - singlskv   Цитата(zltigo @ Oct 18 2007, 02:04) Легко...   Oct 17 2007, 22:24
||- - zltigo   Цитата(singlskv @ Oct 18 2007, 01:24) а п...   Oct 17 2007, 22:35
||- - singlskv   Цитата(zltigo @ Oct 18 2007, 02:35) В aes...   Oct 17 2007, 22:55
|- - SasaVitebsk   Цитата(singlskv @ Oct 17 2007, 23:29) Ну ...   Oct 18 2007, 19:35
|- - Сергей Борщ   Цитата(SasaVitebsk @ Oct 18 2007, 22:35) ...   Oct 18 2007, 20:40
|- - zltigo   Цитата(SasaVitebsk @ Oct 18 2007, 22:35) ...   Oct 18 2007, 22:05
|- - singlskv   To zltigo и SasaVitebsk, признаю, погорячился насч...   Oct 18 2007, 22:48
|- - zltigo   Цитата(singlskv @ Oct 19 2007, 01:48) Спр...   Oct 19 2007, 07:31
|- - Непомнящий Евгений   Цитата(singlskv @ Oct 19 2007, 02:48) Ну ...   Oct 19 2007, 07:37
|- - zltigo   Цитата(Непомнящий Евгений @ Oct 19 2007, 10...   Oct 19 2007, 08:01
- - Непомнящий Евгений   Если максимальная оптимизация по размеру, то первы...   Oct 19 2007, 08:33
|- - singlskv   Цитата(Непомнящий Евгений @ Oct 19 2007, 11...   Oct 19 2007, 15:08
|- - SasaVitebsk   Цитата(singlskv @ Oct 19 2007, 18:08) А о...   Oct 20 2007, 20:07
|- - singlskv   Цитата(SasaVitebsk @ Oct 21 2007, 00:07) ...   Oct 21 2007, 17:28
|- - pvp   Цитата(singlskv @ Oct 21 2007, 21:28) __z...   Oct 22 2007, 15:24
|- - Сергей Борщ   Цитата(pvp @ Oct 22 2007, 18:24) Поясните...   Oct 22 2007, 15:33
|- - pvp   Цитата(Сергей Борщ @ Oct 22 2007, 19:33) ...   Oct 23 2007, 14:02
- - SasaVitebsk   Внимательно просмотрю. Правда я отказался на сегод...   Oct 22 2007, 10:43
|- - singlskv   Цитата(SasaVitebsk @ Oct 22 2007, 14:43) ...   Oct 22 2007, 16:43
- - SasaVitebsk   Я когда первый раз увидел результаты компилировани...   Oct 22 2007, 21:24
- - skripach   Не стал создавать новую тему, поэтому здесь. Можно...   Nov 9 2009, 14:11
- - skripach   Что никто не знает? ...или я что-то не то спросил.   Nov 12 2009, 07:30
|- - zltigo   Цитата(skripach @ Nov 12 2009, 10:30) Что...   Nov 12 2009, 09:39
- - KSN   Есть вопрос по прерываниям в bootloader и applicat...   Feb 27 2010, 09:55
- - Сергей Борщ   Цитата(KSN @ Feb 27 2010, 11:55) Может у ...   Feb 27 2010, 11:39


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

 


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


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