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

 
 
> Автоматическое размещение секции по нужному адресу, WinAVR загрузчик - удаление таблицы векторов
ARV
сообщение Mar 25 2010, 08:32
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



захотелось сделать собственный boolloader с шифрованием.
план действий такой: загрузчик есть обычная программа Си, всю секцию .text которой я размещаю во FLASH-области загрузчика AVR. но тут возникает проблема: прерывания я не использую, и получается, что вся таблица векторов напрасно занимает память. ничего проще, чем сместить адрес секции .text так, чтобы на начало области загрузчика пришлось как раз начало собственно кода инициализации программы, мне в голову не пришло.

конечно, можно все делать руками: вычислять размер таблицы векторов, вычислять новый адрес для начала загрузчика и т.п.... но хочется как-то это упростить. посему вопрос: есть ли возможность каким-либо способом передать компоновщику адрес секции, взяв его из результата работы препроцессора? т.е. я определяю макрос START_BOOT_ADDR в тексте программы, его значение вычисляется компилятором и... и как-то попадает в опцию -Wl,--section-start=.text=START_BOOT_ADDR... это возможно? или есть более кошерный способ достичь желаемого?

Да, вот еще что: в конце кода компилятор добавляет совершенно ненужные команды cli и rjmp $ - нет ли способа от них избавиться?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение Mar 25 2010, 11:56
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(ARV @ Mar 25 2010, 12:32) *
есть ли возможность каким-либо способом передать компоновщику адрес секции, взяв его из результата работы препроцессора? т.е. я определяю макрос START_BOOT_ADDR в тексте программы, его значение вычисляется компилятором и... и как-то попадает в опцию -Wl,--section-start=.text=START_BOOT_ADDR... это возможно? или есть более кошерный способ достичь желаемого?

если подойти к проблеме с другой стороны
Код
START_BOOT_ADDR = 0x1000
LDFLAGS += -Wl,--section-start=.text=$(START_BOOT_ADDR)
CDEFS+= -DSTART_BOOT_ADDR=$(START_BOOT_ADDR)

Так получше? К тому же отсюда можно и фьюзами при прошивке управлять

Насчет rjmp - нафига его удалять, если для штатного сброса собакой можно просто выйти из функции? У Вас ведь есть варианты, где надо устроить сброс?
Go to the top of the page
 
+Quote Post



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

 


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


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