olrkiev 0 2 февраля, 2009 Опубликовано 2 февраля, 2009 · Жалоба Хочу сразу сказать, что перекопал уже весь форум и не только этот, прочитал 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arttab 0 3 февраля, 2009 Опубликовано 3 февраля, 2009 · Жалоба как предположение: задайте в адрес в явном виде, а не выражением -Z(FARCODE)BOOT_SECTION=(_..X_FLASH_END-_..X_BOOTSEC_SIZE-1)- _..X_FLASH_END убедитесь что BOOT_SECTION находиться в области определенной как загрузчик фузами. мне в свое время помогла авр студия - видно что где находится и чего делает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
olrkiev 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Получилось у меня загнать функцию в область бутлоудера, но только main, других финкциях он просто игнорирует, ПОЧЕМУ? HELP Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arttab 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба значит компилятор не понял Вашего указания где разместить бутовую функцию. я выкладывал pdf с описанием как у меня получилось самопрограммирование. поищите на форуме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergik_vrn 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Получилось у меня загнать функцию в область бутлоудера, но только main, других финкциях он просто игнорирует, ПОЧЕМУ? HELP а зачем Вы вводите новый сегмент? разместите в области загрузчика основные стандартные сегменты программы (CODE, и тд.) например: /* Code memory - this line is generated with preprocessor.xls */ -Z(CODE)INTVEC,FAR_F,SWITCH,INITTAB,CODE,NEAR_F=1E000-1FFFF Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
olrkiev 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба а зачем Вы вводите новый сегмент? разместите в области загрузчика основные стандартные сегменты программы (CODE, и тд.) например: Может я ошибаюсь, но тогда и весь остальной код попадет в эту область. Дело в том, что уже есть написаннаяи отлаженная мною программа, которая уже около года используется у клиентов код ее занимает 30 К, к этой программе надо добавить бутлоудер, что бы можно было обновлять прошивку удаленно, а не лежать каждый раз с отверткой под станком Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 5 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба ... к этой программе надо добавить бутлоудерИмхо, в этом - Ваша ошибка. Нужно не добавлять к программе бутлоудер, а сделать его. Т.е., это должны быть две программы: 1) рабочая программа; 2)бутлоудер, который заменяет любую(!) рабочую программу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
olrkiev 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Имхо, в этом - Ваша ошибка. Нужно не добавлять к программе бутлоудер, а сделать его. Т.е., это должны быть две программы: 1) рабочая программа; 2)бутлоудер, который заменяет любую(!) рабочую программу. Возможно Вы правы, но ведь должно работать и как одна, просто так как Вы предлагаете, придется программировать в два приема, сначала бутлоудер, а потом в сети заказчика заливать прогу, я не уверен, что вложусь в 4к, по сути придется реализовывать весь протокол в будлоудере, а так можно будет взять прошивку из внешней флешь памяти загрузенной основной программой Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 5 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба ... а так можно будет взять прошивку из внешней флешь памяти загрузенной основной программойНе очень понятно, что же Вы хотите реализовать... Но, если в процессе загрузки будут участвовать куски основной (рабочей) программы, то перезалить её Вы не сможите. PS Основная программа может подготавливать данные для бутлоудера: считать новую рабочую программу с флэш в некую внутреннюю память устройства (не память МК) и передать управление бутлоудеру, который запишет её в память программ МК. Бутлоудер, в общем случае, может брать данные откуда Вам удобно (UART, USB или что-то ещё). Но, это будет всё равно две программы: основная (рабочая) программа и бутлоудер. придется программировать в два приема, сначала бутлоудер, а потом в сети заказчика заливать прогуВовсе не обязательно. Располагаюся они в разных частях памяти программ и одним и тем же программатором можно записать их вместе: стирание памяти делается одно на два программирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Человек, видимо имеет ввиду, что он с помощью основной программы тянет откуда то прошивку и сохраняет ее , например , в ат45 на борту. Затем девайс ребутится и бутлоадер забирает код прошивки из ат45 и перешивает девайс. Судя по упоминанию "сети" заказчика, прошивка будет браться через Ethernet и обработка Ethernet-а не влезет в бутлоадер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 5 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба с помощью основной программы тянет откуда то прошивку и сохраняет ее... Затем девайс ребутится и бутлоадер забирает код прошивки из ат45 и перешивает девайс.Да - ради Бога! Но, зачем скрещивать "ужа и ежа"? Бутлоудер ведь не будет перепрошиваться у заказчика - только рабочая программа, которая в последствии тоже, возможно, будет перезалита тем же способом. Нужно строго разделить подготовку (в рабочей программе) и запись (бутлоудер). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Это да, бутлоадер отдельно всегда пишется. Как вариант решения, сделать отдельный бут, отдельную прогу, зашить бут, бутом зашить прогу, считать программатором дамп и этим дампом прошивать девайсы при производстве. При внесении изменений, все операции повторить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 5 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба сделать отдельный бут, отдельную прогу, зашить бут, бутом зашить прогуЕсли рабочая программа подготавливает данные для загрузчика, то предложенное Вами - проблематично: некому подготавливать... 1) Некоторым программаторам можно сказать: перед прошивкой не делать стирания памяти. 2) Можно "слить" в один два hex-файла... PS Кстати, если рабочая программа действительно подготавливает данные для загрузчика, то у такой методы заливки есть "ахиллесова пята": в случае повреждения рабочей программы заливка новой программы загрузчиком - невозможна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
olrkiev 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Человек, видимо имеет ввиду, что он с помощью основной программы тянет откуда то прошивку и сохраняет ее , например , в ат45 на борту. Затем девайс ребутится и бутлоадер забирает код прошивки из ат45 и перешивает девайс. Судя по упоминанию "сети" заказчика, прошивка будет браться через Ethernet и обработка Ethernet-а не влезет в бутлоадер. Да, Вы правы, именно так и обстоит дело Если рабочая программа подготавливает данные для загрузчика, то предложенное Вами - проблематично: некому подготавливать... 1) Некоторым программаторам можно сказать: перед прошивкой не делать стирания памяти. 2) Можно "слить" в один два hex-файла... PS Кстати, если рабочая программа действительно подготавливает данные для загрузчика, то у такой методы заливки есть "ахиллесова пята": в случае повреждения рабочей программы заливка новой программы загрузчиком - невозможна. Я таки соглашусь с Вами и буду делать загрузчик отдельным проектом, почему-то мне казалось, что это не обязательно Думаю, что слить (заменить часть hex ) будет возможным, хотя это и извращение Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба А надо всегда держать образ программы во внешней памяти и если основная программа повредилась, загрузчик должен восстановить ее, правда если развивать мысль далее, то и этот образ надо периодически проверять на битость и перезаливать если найдены повреждения. Да и вообще сделать старт девайса с бутлоадера, тогда он может проверять программу в памяти контроллера на сумму, если она не совпадает, то пытаться залить ее с носителя, предварительно проверив файл на носителе на повреждения, а дополнительно к этому еще и обрабатывать условие для перепрошивки, что влечет за собой необходимость хранить 2 версии программы, текущую и новую, но это не проблема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться