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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Снова о самопрограммировании
Prime
сообщение Feb 5 2009, 18:56
Сообщение #16





Группа: Новичок
Сообщений: 5
Регистрация: 3-11-06
Из: Ташкент
Пользователь №: 21 932



Я делал так:
Отдельно заливал бутлодер, настраивал контроллер так, чтобы он всегда с него грузился. Дальше возможно два варианта - либо по состоянию какой нибудь ноги контроллера определять, хочет ли пользователь, чтобы работал загрузчик, или же выходить в основную программу. Другой вариант - ожидание внешней команды (например, мой загрузчик работал по USART, и в течении 100 мс ждал команды, а затем уходил в основную программу, если команду не получил). В данных вариантах даже если загрузчик не сможет полностью обновить прошивку из за сбоев, всегда будет работать первым бутлодер (если конечно он сам не повредиться, за этим лучше следить либо в нём самом, либо защитить его лок-битами)
Go to the top of the page
 
+Quote Post
IJAR
сообщение Feb 5 2009, 21:05
Сообщение #17


Местный
***

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



Цитата(Oless @ Feb 4 2009, 17:27) *
Да, Вы правы, именно так и обстоит дело






Я таки соглашусь с Вами и буду делать загрузчик отдельным проектом, почему-то мне казалось, что это не обязательно
Думаю, что слить (заменить часть hex ) будет возможным, хотя это и извращение


Спасибо


Вариантов решения Вашей задачи достаточно много: приведу 1.
Лучше делать 2 проекта:
1. BootLoader
2. USER proram

Boot естественно размещаете в секции Boot, USER с адреса 0x0000. В секции векторов прерывания ставие
jmp на соответствующие адреса секции USER, кроме USART-a (он исп-ся для закачки програамы USER)
Старт на BootrLoader - он настраивает USART и разрешает прерывания от него, инициализирует свои
переменные (min 16-20 ячеек RAM ими придется пожертвовать в USER а если USER уже написан, то поскать в нем). После инициализации BootLoader отдается USER-у на адрес 0x0000. При замене программы USER -
дергаете USART - преравание от него попадут BootLoader-у и он обработав его на всякие ошибко и
пароли вернется не к USER-у а в свой main и тогда весь RAM будет в его распоряжении. Дальнейшее -
дело техники и Вашей фантазии.


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 5 2009, 22:39
Сообщение #18


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(IJAR @ Feb 5 2009, 23:05) *
jmp на соответствующие адреса секции USER, кроме USART-a (он исп-ся для закачки програамы USER)

Как-то закручено и неестественно получается.
Почему бы просто не выставить фуз BOOTRST, а вектора переключать в BOOT секцию с помощью бита IVSEL. Получатся два абсолютно независимых проекта.
Из BOOT'а в основную программу переходить - jmp 0x0, наоборот (из USER в BOOT) - по WDT сбросу.
Сигналить из основной программы бутлоадеру о наличии обновленной прошивки через оговоренную ячейку EEPROM.
Go to the top of the page
 
+Quote Post
IJAR
сообщение Feb 6 2009, 08:59
Сообщение #19


Местный
***

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



Цитата(defunct @ Feb 6 2009, 01:39) *
Как-то закручено и неестественно получается.
Почему бы просто не выставить фуз BOOTRST, а вектора переключать в BOOT секцию с помощью бита IVSEL. Получатся два абсолютно независимых проекта.
Из BOOT'а в основную программу переходить - jmp 0x0, наоборот (из USER в BOOT) - по WDT сбросу.
Сигналить из основной программы бутлоадеру о наличии обновленной прошивки через оговоренную ячейку EEPROM.


>Как-то закручено и неестественно получается....
>фуз BOOTRST
Вот те раз - закручено, а по-моему так прще простого.
Я же написал: Старт кристалла на BootLoader - это и подразумевает установку BOOTRST.
А вот где держать вектора: здесь понятно 2 варианта в USER секции или Boot секциии,
если нет иасходников на USER а только hex файл прошивки, тогда ес-но в Boot, если же есть исходники,
то можно и в USER (выгадываем на каждом вызове прерывания время на лишний jmp).
В конце концов USER инициализируется после BootLoader - он решит где их размещать.
Но не делать же 2 вариана Boot - так получится один унмверсальный. Преимущество моего способа
в том, что USER не обязан знать о существовании BootLoader-a кроме выделения для него нескольких
адресов RAM (это можно делать в файле конфига линкера), кроме того не требуется лишних pin-ов
на кристалле для определения "куда стартовать"

>Из BOOT'а в основную программу переходить - jmp 0x0, наоборот (из USER в BOOT) - по WDT сбросу.


Можно и так, если конечно USER сам знает когда делать обновление, хотя можно обойтись и jmp на старт Boot
Если же все идет от оператора то переход из USER в BOOT см. мой порст выше - по рывку за USART!!!

>Сигналить из основной программы бутлоадеру о наличии обновленной прошивки через оговоренную ячейку EEPROM.
А вот это ради Бога - я же написал "тут дело техники и Вашей фантазии"


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 6 2009, 11:34
Сообщение #20


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(IJAR @ Feb 6 2009, 10:59) *
Преимущество моего способа в том, что USER не обязан знать о существовании BootLoader-a кроме выделения для него нескольких
адресов RAM (это можно делать в файле конфига линкера), кроме того не требуется лишних pin-ов

Ваш способ имеет право на жизнь. Но - выделить несколько адресов RAM, держать "в уме" что один из векторов "обслуживается" другим проектом - это есть зависимость одного проекта от другого... На мой взгляд проекты BOOT/USER надо строить полностью независимо друг от друга.
Насчет пинов, лишних пинов BOOT'у не нужно, а когда понадобится нечто вроде HW write-protection'a или HW реквеста обновить прошивку можно пользовать пины с ISP разъема, например MISO/MOSI.

BOOT по минимуму должен уметь:
a. Прошивать.
b. Проверять то, что прошил.
c. запускать то, что прошил.

USER:
По минимуму должен работать одинаково как с прошитым BOOT'ом, так и без него.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Feb 6 2009, 12:48
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(defunct @ Feb 6 2009, 15:34) *
BOOT по минимуму должен уметь:
a. Прошивать.
b. Проверять то, что прошил.
c. запускать то, что прошил.

Я бы добавил :
0. Проверять имеющееся приложение перед тем, как на него перейти.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 6 2009, 14:05
Сообщение #22


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Dog Pawlowa @ Feb 6 2009, 14:48) *
Я бы добавил :
0. Проверять имеющееся приложение перед тем, как на него перейти.

Это комбинация пунктов "b" и "c" smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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