Технический форум по робототехнике.
Michael_K » 18 ноя 2011, 13:15
Почему нонсенс, она просто не возвращает управление. Никогда.
Хорошо, как мне еще нужно было назвать кусок кода описанный на си как функция,
выглядящий для остального кода как функция, принимающий параметры в регистрах и на стеке как функция,
размещающий локальные переменные на стеке, как функция, но не возвращающий управление?
Тупо зацикливающийся в конце.
Например функция мэйн в огромном большинстве моих проектов не возвращает управление.
Я задал вполне конкретный вопрос. И в рамках этого вопроса описал условия полностью.
Есть там гуй или нету там гуя - к компилятору и линкеру никакого отношения не имеет.
Flexz » 18 ноя 2011, 13:19
Michael_K писал(а):Так или иначе код придется разделять на непересекающиеся по ресурсам секции.
Так что проблему описанную в стартовом топике ваши "так называемые предложения" не решают никак.
И не надо тут оффтопить.
А теперь внимательно перечитайте, что я вам выше предлагал, про независимые программы. Вы делаете абсолютно тоже самое только какими-то жуткими и ненужными ухищрениями. То что вы делаете имело бы смысл, если две части были бы по большей части независимы, однако имели бы какую-то общую часть.
Прежде чем изобретать велосипед стоит посмотреть на готовые.
Вот, например, простенькое описание загрузчика от ST. Все виденые мною загрузчики для АВР сделаны аналогично.
Michael_K » 18 ноя 2011, 13:23
Словно умудренные жизненным опытом стервятники в пустыне, они смотрят вслед проползающим путникам.
На вопрос, где можно напиться, они долго обсуждают, нужна ли тебе вода и неизменно приходят к выводу, что нет, тебе, брат, вода ни к чему.
Неспешно перечисляют причины, по которым тебе лучше жить без воды.
И ни один из них не покажет в какой стороне колодец.
Добавлено спустя 2 минуты 13 секунд:Адекватно на вопрос ответил только Vooon... и Сергей со второго раза.
Однако проблема была в баге компилятора (в GCC 4.2, говорят, исправлен)
Добавлено спустя 1 минуту 40 секунд:Flexz писал(а):Прежде чем изобретать велосипед стоит посмотреть на готовые.
Прежде чем отвечать на вопрос, нужно его понять.Проблема же не в том бутлоадер я располагаю по абсолютному адресу,
или мэйн или еще какой-то кусок кода. Проблема в том, что этот самый кусок кода, вход в который расположенный по абсолютному адресу, пользуется другими функциями и данными, которые, естественно, хочется расположить в его же секции.
blindman » 18 ноя 2011, 13:36
Michael_K писал(а):Словно умудренные жизненным опытом стервятники в пустыне, они смотрят вслед проползающим путникам.
Ну вот сразу стервятники.
Проблема выеденного яйца не стоит. Пишем функцию, которая осуществляет запись, в виде отдельной программы, загружаем в старшие алреса. Основное приложение - отдельная программа, загружаемая с нулевого адреса.
Michael_K » 18 ноя 2011, 13:55
То есть вы считаете, что это более простой и прямой способ? Нуну...
"Функция в виде отдельной программы" - это прикол тот еще. Потому что потребует полностью переписать линкер-скрипт и, возможно, стартап код (какая-нибудь случайно затесавшаяся инициализация стека доставит много радости). Я например с ходу не стал бы гарантировать, что там компилятор-с-линкером нагородят. А процесс отладки такой "функции в виде отдельной программы" представили?
И главное-то проблему оно не снимает - поменяются только названия - все равно линкеру нужно сказать, где в секции "текст" будет точка входа в "мэйн".
Последний раз редактировалось
Michael_K 18 ноя 2011, 14:01, всего редактировалось 1 раз.
blindman » 18 ноя 2011, 14:01
Отладка ничем не отличается от любой другой программы. В чем проблема-то? Считайте, что начала выполняться совершенно другая программа. какая разница как там стэк инициализируется? Скрипты за вас уже написали авторы бутлоадеров, для любых контроллеров
Michael_K » 18 ноя 2011, 14:03
blindman » 18 ноя 2011, 14:05
Я это понимаю так, что вы уперлись в какое-то решение, которое сами придумали, и не желаете никого слушать, кто предлагает другие способы, возможно более простые и надежные
Michael_K » 18 ноя 2011, 14:13
Вы же не отвечаете на поставленную задачу!!!
Попробуйте написать "функцию в виде отдельной программы" так чтобы точка входа в мэйн располагалась по заранее заданному адресу.
Условие - в мейн передаются аргументы и мэйн вызывает другие функции и обращается к таблицам констант (и об этом написано в стартовом топике). То есть функция мэйн - не единственная в секции.
dccharacter » 18 ноя 2011, 14:20
Да ты просто странно пишешь вопросы. Я вот возился сейчас с бутлоадером для своего осцилла, все выглядит так, как говорит блайндмен. Есть программа, которая пишется в определенное место в мк (в моем случае это 0x8000000). Программа проверяет нажата ли определенная кнопка. Если да, то вводит МК в режим USB_DFU, который принимает по уарту основную программу и размещает ее в памяти МК начиная с адреса 0x8004000, если кнопка не нажата, то делает джамп то юзер аппликейшн, который, опять же, начинается с адреса 0х8004000. Причем все это можно сделать и без ДФУ - тупо при записи памяти указать начальный адрес, по которому хочешь писать. Хотя в .hex-е первой строкой прописывается адрес, в который надо класть.
А ты непонятно чего хочешь, да еще и злишься.
blindman » 18 ноя 2011, 14:23
Michael_K, подсказать, как передать параметры в функцию main() бутлоадера?
Flexz » 18 ноя 2011, 14:24
Попробуйте написать "функцию в виде отдельной программы"...
Ну и в чем проблема-то? именно так это и делается.
линкеру нужно сказать, где в секции "текст" будет точка входа в "мэйн".
Нда.. Линкеру начхать на мейн, он не знает что это. В начале секции текст располагается ctr startup (как он туда попадает? ну посмотрите стартапы от любого ARM-а и соответствующие скрипты линкера), он инициализирует секции bss и data и под занавес вызывает main. Кажется вам стоит разобраться с базовыми понятиями, прежде чем браться за что-то более сложное.
blindman » 18 ноя 2011, 14:26
Кстати, топистартер говорил-где-то, что у него ARM? AVR? или что-то еще?
Michael_K » 18 ноя 2011, 14:27
Хохо...
Flexz » 18 ноя 2011, 14:30
blindman писал(а):Кстати, топистартер говорил-где-то, что у него ARM? AVR? или что-то еще?
Нет он это тщательно скрывает.