Перейти к содержанию
    

Снова о самопрограммировании

Хочу сразу сказать, что перекопал уже весь форум и не только этот, прочитал 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как предположение:

задайте в адрес в явном виде, а не выражением -Z(FARCODE)BOOT_SECTION=(_..X_FLASH_END-_..X_BOOTSEC_SIZE-1)-

_..X_FLASH_END

убедитесь что BOOT_SECTION находиться в области определенной как загрузчик фузами.

 

мне в свое время помогла авр студия - видно что где находится и чего делает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получилось у меня загнать функцию в область бутлоудера, но только main, других финкциях он просто игнорирует, ПОЧЕМУ?

HELP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

значит компилятор не понял Вашего указания где разместить бутовую функцию.

я выкладывал pdf с описанием как у меня получилось самопрограммирование. поищите на форуме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получилось у меня загнать функцию в область бутлоудера, но только main, других финкциях он просто игнорирует, ПОЧЕМУ?

HELP

а зачем Вы вводите новый сегмент? разместите в области загрузчика основные стандартные сегменты программы (CODE, и тд.)

например:

 

/* Code memory - this line is generated with preprocessor.xls */

-Z(CODE)INTVEC,FAR_F,SWITCH,INITTAB,CODE,NEAR_F=1E000-1FFFF

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а зачем Вы вводите новый сегмент? разместите в области загрузчика основные стандартные сегменты программы (CODE, и тд.)

например:

Может я ошибаюсь, но тогда и весь остальной код попадет в эту область.

Дело в том, что уже есть написаннаяи отлаженная мною программа, которая уже около года используется у клиентов

код ее занимает 30 К, к этой программе надо добавить бутлоудер, что бы можно было обновлять прошивку удаленно,

а не лежать каждый раз с отверткой под станком

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... к этой программе надо добавить бутлоудер
Имхо, в этом - Ваша ошибка. Нужно не добавлять к программе бутлоудер, а сделать его. Т.е., это должны быть две программы: 1) рабочая программа; 2)бутлоудер, который заменяет любую(!) рабочую программу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имхо, в этом - Ваша ошибка. Нужно не добавлять к программе бутлоудер, а сделать его. Т.е., это должны быть две программы: 1) рабочая программа; 2)бутлоудер, который заменяет любую(!) рабочую программу.

Возможно Вы правы, но ведь должно работать и как одна, просто так как Вы предлагаете, придется программировать в два приема, сначала бутлоудер, а потом в сети заказчика заливать прогу, я не уверен, что вложусь в 4к, по сути придется реализовывать весь протокол в будлоудере, а так можно будет взять прошивку из внешней флешь памяти загрузенной основной программой

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... а так можно будет взять прошивку из внешней флешь памяти загрузенной основной программой
Не очень понятно, что же Вы хотите реализовать... Но, если в процессе загрузки будут участвовать куски основной (рабочей) программы, то перезалить её Вы не сможите.

PS Основная программа может подготавливать данные для бутлоудера: считать новую рабочую программу с флэш в некую внутреннюю память устройства (не память МК) и передать управление бутлоудеру, который запишет её в память программ МК. Бутлоудер, в общем случае, может брать данные откуда Вам удобно (UART, USB или что-то ещё). Но, это будет всё равно две программы: основная (рабочая) программа и бутлоудер.

 

придется программировать в два приема, сначала бутлоудер, а потом в сети заказчика заливать прогу
Вовсе не обязательно. Располагаюся они в разных частях памяти программ и одним и тем же программатором можно записать их вместе: стирание памяти делается одно на два программирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Человек, видимо имеет ввиду, что он с помощью основной программы тянет откуда то прошивку и сохраняет ее , например , в ат45 на борту. Затем девайс ребутится и бутлоадер забирает код прошивки из ат45 и перешивает девайс. Судя по упоминанию "сети" заказчика, прошивка будет браться через Ethernet и обработка Ethernet-а не влезет в бутлоадер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

с помощью основной программы тянет откуда то прошивку и сохраняет ее... Затем девайс ребутится и бутлоадер забирает код прошивки из ат45 и перешивает девайс.
Да - ради Бога! Но, зачем скрещивать "ужа и ежа"? Бутлоудер ведь не будет перепрошиваться у заказчика - только рабочая программа, которая в последствии тоже, возможно, будет перезалита тем же способом. Нужно строго разделить подготовку (в рабочей программе) и запись (бутлоудер).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это да, бутлоадер отдельно всегда пишется. Как вариант решения, сделать отдельный бут, отдельную прогу, зашить бут, бутом зашить прогу, считать программатором дамп и этим дампом прошивать девайсы при производстве. При внесении изменений, все операции повторить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сделать отдельный бут, отдельную прогу, зашить бут, бутом зашить прогу
Если рабочая программа подготавливает данные для загрузчика, то предложенное Вами - проблематично: некому подготавливать...

1) Некоторым программаторам можно сказать: перед прошивкой не делать стирания памяти.

2) Можно "слить" в один два hex-файла...

 

PS Кстати, если рабочая программа действительно подготавливает данные для загрузчика, то у такой методы заливки есть "ахиллесова пята": в случае повреждения рабочей программы заливка новой программы загрузчиком - невозможна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Человек, видимо имеет ввиду, что он с помощью основной программы тянет откуда то прошивку и сохраняет ее , например , в ат45 на борту. Затем девайс ребутится и бутлоадер забирает код прошивки из ат45 и перешивает девайс. Судя по упоминанию "сети" заказчика, прошивка будет браться через Ethernet и обработка Ethernet-а не влезет в бутлоадер.

Да, Вы правы, именно так и обстоит дело

 

 

 

Если рабочая программа подготавливает данные для загрузчика, то предложенное Вами - проблематично: некому подготавливать...

1) Некоторым программаторам можно сказать: перед прошивкой не делать стирания памяти.

2) Можно "слить" в один два hex-файла...

 

PS Кстати, если рабочая программа действительно подготавливает данные для загрузчика, то у такой методы заливки есть "ахиллесова пята": в случае повреждения рабочей программы заливка новой программы загрузчиком - невозможна.

 

 

Я таки соглашусь с Вами и буду делать загрузчик отдельным проектом, почему-то мне казалось, что это не обязательно

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

 

 

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А надо всегда держать образ программы во внешней памяти и если основная программа повредилась, загрузчик должен восстановить ее, правда если развивать мысль далее, то и этот образ надо периодически проверять на битость и перезаливать если найдены повреждения. Да и вообще сделать старт девайса с бутлоадера, тогда он может проверять программу в памяти контроллера на сумму, если она не совпадает, то пытаться залить ее с носителя, предварительно проверив файл на носителе на повреждения, а дополнительно к этому еще и обрабатывать условие для перепрошивки, что влечет за собой необходимость хранить 2 версии программы, текущую и новую, но это не проблема.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...