|
Снова о самопрограммировании |
|
|
|
Feb 2 2009, 10:28
|
Группа: Участник
Сообщений: 11
Регистрация: 4-12-08
Пользователь №: 42 204

|
Хочу сразу сказать, что перекопал уже весь форум и не только этот, прочитал avr106 но проблему устранить так и не смог. Нужна помощь. Необходимо сделать обновление флеш программ. Для этого пытаюсь разместить код бутлоудера в отведенное ему пространство, но после программирования атмеги128 и последующего считывания код остается в начале прошивки. Как было рекомендовано в avr106, взял стандартный lnkm128s.xcl добавил в него -D_..X_BOOTSEC_SIZE=2000 /* 4096 words */ -Z(FARCODE)BOOT_SECTION=(_..X_FLASH_END-_..X_BOOTSEC_SIZE-1)- _..X_FLASH_END
в код программы void ExampleFunction() @ "BOOT_SECTION"{
for(ii=0;ii<100;ii++);// для теста
}
среда иар 2.31 , фьюзы BSIZ=0,BLB0=3,BLB1=3
|
|
|
|
|
 |
Ответов
|
Feb 4 2009, 13:59
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(GDI @ Feb 4 2009, 16:47)  сделать отдельный бут, отдельную прогу, зашить бут, бутом зашить прогу Если рабочая программа подготавливает данные для загрузчика, то предложенное Вами - проблематично: некому подготавливать... 1) Некоторым программаторам можно сказать: перед прошивкой не делать стирания памяти. 2) Можно "слить" в один два hex-файла... PS Кстати, если рабочая программа действительно подготавливает данные для загрузчика, то у такой методы заливки есть "ахиллесова пята": в случае повреждения рабочей программы заливка новой программы загрузчиком - невозможна.
|
|
|
|
|
Feb 4 2009, 14:27
|
Группа: Участник
Сообщений: 11
Регистрация: 4-12-08
Пользователь №: 42 204

|
Цитата(GDI @ Feb 4 2009, 15:18)  Человек, видимо имеет ввиду, что он с помощью основной программы тянет откуда то прошивку и сохраняет ее , например , в ат45 на борту. Затем девайс ребутится и бутлоадер забирает код прошивки из ат45 и перешивает девайс. Судя по упоминанию "сети" заказчика, прошивка будет браться через Ethernet и обработка Ethernet-а не влезет в бутлоадер. Да, Вы правы, именно так и обстоит дело Цитата(Палыч @ Feb 4 2009, 15:59)  Если рабочая программа подготавливает данные для загрузчика, то предложенное Вами - проблематично: некому подготавливать... 1) Некоторым программаторам можно сказать: перед прошивкой не делать стирания памяти. 2) Можно "слить" в один два hex-файла...
PS Кстати, если рабочая программа действительно подготавливает данные для загрузчика, то у такой методы заливки есть "ахиллесова пята": в случае повреждения рабочей программы заливка новой программы загрузчиком - невозможна. Я таки соглашусь с Вами и буду делать загрузчик отдельным проектом, почему-то мне казалось, что это не обязательно Думаю, что слить (заменить часть hex ) будет возможным, хотя это и извращение Спасибо
|
|
|
|
|
Feb 5 2009, 21:05
|

Местный
  
Группа: Свой
Сообщений: 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 будет в его распоряжении. Дальнейшее - дело техники и Вашей фантазии.
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Feb 5 2009, 22:39
|

кекс
     
Группа: Свой
Сообщений: 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.
|
|
|
|
Сообщений в этой теме
Oless Снова о самопрограммировании Feb 2 2009, 10:28 arttab как предположение:
задайте в адрес в явном виде, а... Feb 3 2009, 10:01 Oless Получилось у меня загнать функцию в область бутлоу... Feb 4 2009, 09:56 sergik_vrn Цитата(Oless @ Feb 4 2009, 12:56) Получил... Feb 4 2009, 11:05  Oless Цитата(sergik_vrn @ Feb 4 2009, 13:05) а ... Feb 4 2009, 11:13   Палыч Цитата(Oless @ Feb 4 2009, 14:13) ... к э... Feb 4 2009, 12:08    Oless Цитата(Палыч @ Feb 4 2009, 14:08) Имхо, в... Feb 4 2009, 12:40     Палыч Цитата(Oless @ Feb 4 2009, 15:40) ... а т... Feb 4 2009, 13:16 arttab значит компилятор не понял Вашего указания где раз... Feb 4 2009, 10:34 GDI Человек, видимо имеет ввиду, что он с помощью осно... Feb 4 2009, 13:18 Палыч Цитата(GDI @ Feb 4 2009, 16:18) с помощью... Feb 4 2009, 13:29     IJAR Цитата(defunct @ Feb 6 2009, 01:39) Как-т... Feb 6 2009, 08:59      defunct Цитата(IJAR @ Feb 6 2009, 10:59) Преимуще... Feb 6 2009, 11:34       Dog Pawlowa Цитата(defunct @ Feb 6 2009, 15:34) BOOT ... Feb 6 2009, 12:48        defunct Цитата(Dog Pawlowa @ Feb 6 2009, 14:48) Я... Feb 6 2009, 14:05 GDI А надо всегда держать образ программы во внешней п... Feb 4 2009, 14:28 Prime Я делал так:
Отдельно заливал бутлодер, настраивал... Feb 5 2009, 18:56
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|