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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> bootloader для Atmega48
piz2383
сообщение Jul 6 2009, 20:18
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675



Спасибо всем, комментарии учтены. Буду реализовывать, так что программа по нулевому адресу располагаться, а бутлоадер по адресу С00. Вектор перехода на бутлоадер буду задавать в своей пользовательской программе, это будет мелким ограничением. Кстати как это сделать на асме понимаю, а вот на Си, не очень. WINAVR как я понял сам вектора настраивает, и нулевой вектор он устанавливает на main. А как на Си написать, так что бы нулевой вектор все таки был на адресс C00?
Go to the top of the page
 
+Quote Post
XVR
сообщение Jul 7 2009, 08:05
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Подкрутить файл скрипта линкера (*.ld). Там настраиваются все адреса всех секций
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 7 2009, 08:34
Сообщение #18


Гуру
******

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



Цитата(piz2383 @ Jul 6 2009, 23:18) *
А как на Си написать, так что бы нулевой вектор все таки был на адресс C00?
Это Вам зачем? Поскольку Вы ввели загрузчик искусственно, то и поддержку "двух" нулевых векторов прийдется обеспечивать Вам самому. Сам я делам следующим образом:
1. Загрузчик распологается в верхних адресах. Нулевой вертор автоматически (в программе на Си) содержит команду jmp на начало загрузчика.
2. При старте по подаче питания управление передаётся загрузчику.
3. Загрузчик определяет (например, по к-либо ноге) загружать ему в память приложение или передать уже загруженному приложению управление.
4. Если загружать приложение, то загрузчик считывает и записывает в память приложение, при этом "защищает" нулевой вектор - иначе он (загрузчик) не получит управление никогда. Загрузчик должен контролировать - куда производится запись прикладной программы и команду по нулевому адресу не заносить, но "выкусить" из команды и запомнить (записать) у себя адрес перехода (начало приложения) для последующего старта приложения.
5. Если загружать приложение не нужно - передаётся управление на начало приложения по ранее сохранённому адресу.
Go to the top of the page
 
+Quote Post
piz2383
сообщение Jul 7 2009, 09:08
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675



Цитата(Палыч @ Jul 7 2009, 11:34) *
1. Загрузчик распологается в верхних адресах. Нулевой вертор автоматически (в программе на Си) содержит команду jmp на начало загрузчика.
2. При старте по подаче питания управление передаётся загрузчику.

Я все-равно не понял. Как нулевой вектор сделать так, что бы он ссылался на бутлоадер.
По-порядку. В общем я в мейк-файле как и оговаривось дописал "BOOTLOADER_ADDRESS = 0x00С00 и LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS)"
После этого hex-файл сгенерировался следующего вида: с адресса 0 до С00 у меня FF-ки, а уже вектора прерываний размещены по адрессу C00, а далее программа (нулевой вектор храниn jmp на адресс С00+N). А мне же нужно сделать что бы вектора прерываний размещались с 0 до-ого N-го адресса (сколько там прерываний), нулевой хранил jmp на C00. Как это сделать?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 7 2009, 09:45
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(piz2383 @ Jul 7 2009, 12:08) *
А мне же нужно сделать что бы вектора прерываний размещались с 0 до-ого N-го адресса (сколько там прерываний), нулевой хранил jmp на C00. Как это сделать?
забыть про --section-start. Он в вашем случае не подходит. Берите в WinAVR/avr/lib/ldscripts подходящий скрипт, копируйте в свой проект, подключайте через -Wl,-T,<имя скрипта>, выносите в нем входную секцию .vectors из выходной секции .text в отдельную секцию, располагайте ее с адреса 0, секцию .text располагайте с 0xC00. Размеры памятей в скрипте ограничьте под свой контроллер. Основную программу линкуйте с опцией -nostartfiles, секцию векторов заполняйте в отдельном ассемблерном файле. За основу этого файла возьмите gcrt.S из исходников avr-libc. Для основного приложения возьмите тот же исходный скрипт и ограничьте в нем память кода до 0xc00 (ну и размеры остальных памятей под свой контроллер тоже) .


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 7 2009, 09:45
Сообщение #21


Гуру
******

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



BOOTLOADER_ADDRESS - это, как я понимаю, секция для процедур и функций Вашего бутлоадера. К векторам она никакого отношения не имеет. По нулевому вектору будет размещен переход на модуль startup из которого переход на main бутлоадера. Бутлоадер прийдётся написать такой, что, кроме вектора 0, никакие вектора не используются (всё по готовности!). Т.е. в вашем бутлоадере будет: вектор ноль и далее с адреса С00 собственно тело бутлоадера.
Прикладная программа - как обычная... Т.е. в прикладной программе будут присутствовать при необходимости все вектора. Чтобы бутлоадер не перетёр при записи прикладной программы свой нулевой вектор нулевым вектором программы необходимо контролировать запись: при попытке записать информацию в нулевой вектор (а, это будет jmp стартовый_адрес) необходимо "выцарапать" стартовый адрес прикладной программы и где-то его (адрес) сохранить, чтобы позже запускать прикладную программу (ведь из бутлоадера нельзя сделать jmp 0 - нулевой вектор - это вектор самого бутлоадера!). Всё выше описанное - плата за искусственный (раз настоящего нет) бутлоадер.

P.S. Или Вы запуск бутлоадера планируете из прикладной программы? Типа: прикладная программа получила некую команду по SPI и передала управление бутлоадеру? Тогда, конечно, сказаное мной выше - всё зря... Но, тогда, и нулевой вектор не должен Вас интересовать...
Go to the top of the page
 
+Quote Post

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

 


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


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