|
bootloader на ATMega48 |
|
|
|
Sep 25 2008, 15:29
|

Участник

Группа: Участник
Сообщений: 15
Регистрация: 25-09-08
Пользователь №: 40 478

|
Друзья. Сомнения мучают меня. Хотя начну попорядку. Появилась задумка сделать bootloader под Мегу48. В качестве среды програмирования выбрал IAR. Особенность 48 в том, что у нее нет bootsection. Приходится все описывать вручную. Для начала определяем местоположение загрузчика для чего в линкере прописываем Цитата -Z(CODE)MYSEGMENT=800-9FF Все вроде бы в порядке и в выходном файле появляется в нужном месте содержание загрузчика. И все вроде бы хорошо. Загрузчиком начинаю стирать память контроллера, и вроде бы даже хорошо получается, но когда дохожу до определенного положения стирание прекращается и цикл стирания страниц памяти вылетает. Под пристальным взглядом дизассемблера выясняется, что напоролся на инициализацию секции MYSEGMENT. Загрузчик начинается с адреса 0x0800, а инициализация секции загрузчика с 0x01C0. Кстати на этом месте заканчивается основная программа. Могу ли я расположить код инициализации секции MYSEGMENT уже после самого bootloadera.
|
|
|
|
|
 |
Ответов
|
Sep 29 2008, 14:12
|

Участник

Группа: Участник
Сообщений: 15
Регистрация: 25-09-08
Пользователь №: 40 478

|
Блин, я так и не увидел ответа. Может просто какой-нибудь специалист скажет, что просто невозможно линкеру сказать куда писать инициализацию секции. Идея бутлоадера заключается в следующем. Работать с устройством собираюсь по UART с дальнейшим использованием FT232. Заказчику отправляется программа, а далее в момент появления новой версии софта, новый софт должен прописываться из этой программы коммутации с устройством. При этом не подразумевается перезагрузка устройства, а использование FTDI вобще делает очень не юзабельным загрузку бутлодыря по ресету. Хочется, зарезервировать команду, которая будет запускать процесс перезаливки программы. Поскольку стратегия загрузчика выбрана таким образом, то не важно на чем отрабатывать процесс залавки, потому как стандартная область бутлодыря не используется. Задам вопрос снова. Можно ли указывать линкеру IAR место куда прописывать инициализацию нового сектора
|
|
|
|
|
Sep 29 2008, 14:22
|

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

|
Цитата(РоманО @ Sep 29 2008, 17:12)  Идея бутлоадера заключается в следующем. ... Заказчику отправляется программа, а далее в момент появления новой версии софта, новый софт должен прописываться из этой программы коммутации с устройством. Это стандартная идея. Цитата Хочется, зарезервировать команду, которая будет запускать процесс перезаливки программы. Поскольку стратегия загрузчика выбрана таким образом, то не важно на чем отрабатывать процесс залавки, потому как стандартная область бутлодыря не используется. Задам вопрос снова. Можно ли указывать линкеру IAR место куда прописывать инициализацию нового сектора Такая стратерия загрузки прекрасно уживается с бутлоадером в отдельной секции. По команде запуска процесса обновления прошивки - записать в eeprom запрос на смену прошивки и ребутнуть МК по WDT. Далее стартует бутлоадер из штатной секции, проверяет запрос в eeprom, начинает процесс общения с вашей программой и прошивает все что надо. Но должен быть камень с соотв. секцией (m8/m88) Цитата Можно ли указывать линкеру IAR место куда прописывать инициализацию нового сектора см. #pragma segment и файл lnkm48s.xcl
|
|
|
|
|
Sep 29 2008, 14:50
|

Участник

Группа: Участник
Сообщений: 15
Регистрация: 25-09-08
Пользователь №: 40 478

|
Цитата(defunct @ Sep 29 2008, 18:22)  см. #pragma segment и файл lnkm48s.xcl В том то и дело, что все это я делаю. И делаю правильно, но когда начинаю вытирать память, в какой-то момент цикл стирания памяти вылетает, потому как доходит до странного адреса 0x1c0, если разобрать программу дизассемблером, то по этому адресу лежит инициализация сегмента, в котором лежит бутлодырь. Сам же бутлодырь начинается с адреса 0х800. Вот если бы можно было бы инициализацию сегмента перенести в конец бутлодыря то все было бы просто супер
|
|
|
|
Сообщений в этой теме
РоманО bootloader на ATMega48 Sep 25 2008, 15:29 defunct Цитата(РоманО @ Sep 25 2008, 18:29) Появи... Sep 26 2008, 10:30 haker_fox Цитата(defunct @ Sep 26 2008, 19:30) Вы б... Sep 27 2008, 03:07 _Pasha Цитата(defunct @ Sep 26 2008, 14:30) Вы б... Sep 27 2008, 06:33 IgorKossak РоманО, у Вас бутлоадер и приложение в одном проек... Sep 26 2008, 12:10 sensor_ua Можно подсмотреть, как делать bootloader для ATmeg... Sep 27 2008, 03:57 sensor_ua ЦитатаВопрос отнюдь не религиозный
IMHO, именно ре... Sep 27 2008, 07:28 _Pasha Цитата(sensor_ua @ Sep 27 2008, 11:28) IM... Sep 27 2008, 11:30 defunct Цитата(sensor_ua @ Sep 27 2008, 10:28) IM... Sep 29 2008, 13:46 sensor_ua ЦитатаЭто не в счет,
Почему же? В чужом исходнике ... Sep 27 2008, 12:22 _Pasha Цитата(sensor_ua @ Sep 27 2008, 16:22) эт... Sep 27 2008, 12:37   Огурцов Цитата(РоманО @ Sep 29 2008, 14:50) цикл ... Sep 30 2008, 05:44   Сергей Борщ Цитата(РоманО @ Sep 29 2008, 17:50) если ... Oct 1 2008, 20:21 sensor_ua ЦитатаОк, тогда затолкните эти 3.5k в 1k.
для (m8/... Sep 29 2008, 21:20 defunct Цитата(sensor_ua @ Sep 30 2008, 00:20) За... Sep 29 2008, 23:58 Rst7 ЦитатаСопровождение: кому придет в голову править ... Sep 30 2008, 04:55 sensor_ua ЦитатаЗатолкнул. ровно в 1k под жвак (1024). Аплод... Sep 30 2008, 06:25 GSG Если не критично для программы, то поменяйте места... Sep 30 2008, 10:40 bodja74 2PomanO
Короче
Здесь лежит готовый загрузчик п... Oct 1 2008, 14:40 Огурцов Цитата(bodja74 @ Oct 1 2008, 14:40) Прикр... Oct 1 2008, 17:03
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|