roboforum.ru

Технический форум по робототехнике.

Как правильно расположить объекты в секции (GCC)

Re: Как правильно расположить объекты в секции (GCC)

Michael_K » 18 ноя 2011, 13:15

Почему нонсенс, она просто не возвращает управление. Никогда.
Хорошо, как мне еще нужно было назвать кусок кода описанный на си как функция,
выглядящий для остального кода как функция, принимающий параметры в регистрах и на стеке как функция,
размещающий локальные переменные на стеке, как функция, но не возвращающий управление?
Тупо зацикливающийся в конце.

Например функция мэйн в огромном большинстве моих проектов не возвращает управление.

Я задал вполне конкретный вопрос. И в рамках этого вопроса описал условия полностью.
Есть там гуй или нету там гуя - к компилятору и линкеру никакого отношения не имеет.

Re: Как правильно расположить объекты в секции (GCC)

Flexz » 18 ноя 2011, 13:19

Michael_K писал(а):Так или иначе код придется разделять на непересекающиеся по ресурсам секции.
Так что проблему описанную в стартовом топике ваши "так называемые предложения" не решают никак.
И не надо тут оффтопить.

А теперь внимательно перечитайте, что я вам выше предлагал, про независимые программы. Вы делаете абсолютно тоже самое только какими-то жуткими и ненужными ухищрениями. То что вы делаете имело бы смысл, если две части были бы по большей части независимы, однако имели бы какую-то общую часть.
Прежде чем изобретать велосипед стоит посмотреть на готовые.
Вот, например, простенькое описание загрузчика от ST. Все виденые мною загрузчики для АВР сделаны аналогично.

Re: Как правильно расположить объекты в секции (GCC)

Michael_K » 18 ноя 2011, 13:23

Словно умудренные жизненным опытом стервятники в пустыне, они смотрят вслед проползающим путникам.
На вопрос, где можно напиться, они долго обсуждают, нужна ли тебе вода и неизменно приходят к выводу, что нет, тебе, брат, вода ни к чему.
Неспешно перечисляют причины, по которым тебе лучше жить без воды.
И ни один из них не покажет в какой стороне колодец.


Добавлено спустя 2 минуты 13 секунд:
Адекватно на вопрос ответил только Vooon... и Сергей со второго раза.
Однако проблема была в баге компилятора (в GCC 4.2, говорят, исправлен)

Добавлено спустя 1 минуту 40 секунд:
Flexz писал(а):Прежде чем изобретать велосипед стоит посмотреть на готовые.

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

Re: Как правильно расположить объекты в секции (GCC)

blindman » 18 ноя 2011, 13:36

Michael_K писал(а):Словно умудренные жизненным опытом стервятники в пустыне, они смотрят вслед проползающим путникам.

Ну вот сразу стервятники.

Проблема выеденного яйца не стоит. Пишем функцию, которая осуществляет запись, в виде отдельной программы, загружаем в старшие алреса. Основное приложение - отдельная программа, загружаемая с нулевого адреса.

Re: Как правильно расположить объекты в секции (GCC)

Michael_K » 18 ноя 2011, 13:55

То есть вы считаете, что это более простой и прямой способ? Нуну...
"Функция в виде отдельной программы" - это прикол тот еще. Потому что потребует полностью переписать линкер-скрипт и, возможно, стартап код (какая-нибудь случайно затесавшаяся инициализация стека доставит много радости). Я например с ходу не стал бы гарантировать, что там компилятор-с-линкером нагородят. А процесс отладки такой "функции в виде отдельной программы" представили?

И главное-то проблему оно не снимает - поменяются только названия - все равно линкеру нужно сказать, где в секции "текст" будет точка входа в "мэйн".
Последний раз редактировалось Michael_K 18 ноя 2011, 14:01, всего редактировалось 1 раз.

Re: Как правильно расположить объекты в секции (GCC)

blindman » 18 ноя 2011, 14:01

Отладка ничем не отличается от любой другой программы. В чем проблема-то? Считайте, что начала выполняться совершенно другая программа. какая разница как там стэк инициализируется? Скрипты за вас уже написали авторы бутлоадеров, для любых контроллеров

Re: Как правильно расположить объекты в секции (GCC)

Michael_K » 18 ноя 2011, 14:03

:)

Re: Как правильно расположить объекты в секции (GCC)

blindman » 18 ноя 2011, 14:05

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

Re: Как правильно расположить объекты в секции (GCC)

Michael_K » 18 ноя 2011, 14:13

Вы же не отвечаете на поставленную задачу!!!
Попробуйте написать "функцию в виде отдельной программы" так чтобы точка входа в мэйн располагалась по заранее заданному адресу.
Условие - в мейн передаются аргументы и мэйн вызывает другие функции и обращается к таблицам констант (и об этом написано в стартовом топике). То есть функция мэйн - не единственная в секции.

Re: Как правильно расположить объекты в секции (GCC)

dccharacter » 18 ноя 2011, 14:20

Да ты просто странно пишешь вопросы. Я вот возился сейчас с бутлоадером для своего осцилла, все выглядит так, как говорит блайндмен. Есть программа, которая пишется в определенное место в мк (в моем случае это 0x8000000). Программа проверяет нажата ли определенная кнопка. Если да, то вводит МК в режим USB_DFU, который принимает по уарту основную программу и размещает ее в памяти МК начиная с адреса 0x8004000, если кнопка не нажата, то делает джамп то юзер аппликейшн, который, опять же, начинается с адреса 0х8004000. Причем все это можно сделать и без ДФУ - тупо при записи памяти указать начальный адрес, по которому хочешь писать. Хотя в .hex-е первой строкой прописывается адрес, в который надо класть.

А ты непонятно чего хочешь, да еще и злишься.

Re: Как правильно расположить объекты в секции (GCC)

blindman » 18 ноя 2011, 14:23

Michael_K, подсказать, как передать параметры в функцию main() бутлоадера?

Re: Как правильно расположить объекты в секции (GCC)

Flexz » 18 ноя 2011, 14:24

Попробуйте написать "функцию в виде отдельной программы"...

Ну и в чем проблема-то? именно так это и делается.

линкеру нужно сказать, где в секции "текст" будет точка входа в "мэйн".

Нда.. Линкеру начхать на мейн, он не знает что это. В начале секции текст располагается ctr startup (как он туда попадает? ну посмотрите стартапы от любого ARM-а и соответствующие скрипты линкера), он инициализирует секции bss и data и под занавес вызывает main. Кажется вам стоит разобраться с базовыми понятиями, прежде чем браться за что-то более сложное.

Re: Как правильно расположить объекты в секции (GCC)

blindman » 18 ноя 2011, 14:26

Кстати, топистартер говорил-где-то, что у него ARM? AVR? или что-то еще?

Re: Как правильно расположить объекты в секции (GCC)

Michael_K » 18 ноя 2011, 14:27

Хохо...

Re: Как правильно расположить объекты в секции (GCC)

Flexz » 18 ноя 2011, 14:30

blindman писал(а):Кстати, топистартер говорил-где-то, что у него ARM? AVR? или что-то еще?

Нет он это тщательно скрывает.


Rambler\'s Top100 Mail.ru counter