Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Линковщик
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
cannoneer
Доброго времени суток. Пишу программу для AVR микроконтроллеров на ассемблере. Нужно скомпоновать объектные файлы. Как это можно сделать? На сколько я понимаю, для этого нужен линковщик. Но какой??
zombi
Цитата(cannoneer @ Mar 20 2012, 19:04) *
Нужно скомпоновать объектные файлы.

А объектные файлы чем созданы?
Leopoldius
На каком ассемблере. Телепатия не помогает увы...

Если вы о Авр студии то на выходе получаете файл, который зашивается в МК, если о чем то другом пытаетесь спросить... то пожалуйста - приоткройте завесу тайны... Поподробнее что ли
cannoneer
Использую ассемблер для AVR. Компилятор от AVR Studio (avrasm32.exe). Самим AVR Studio не пользуюсь. Использую программу Tavrasm, которая и запускает компилятор; объектные файлы создаю тоже с ее помощью. Основная идея - разбить программу на отдельные модули, каждый из которых сохраняется в отдельном файле и отдельно компилируется; объединение должно происходить на этапе компоновки.
Сергей Борщ
Атмеловский ассемблер от AVRStudio такого не поддерживает. Возьмите гнутый ассемблер/линкир/все остальное из WinAVR, но исходники придется основательно перелопатить.
cannoneer
Спасибо за ответ. Жаль что не поддерживает. А какой "гнутый" ассемблер возможно использовать?
hd44780
В WinAvr-е есть и компилятор С, и ассемблер, и линковщик.
Сергей Борщ
QUOTE (cannoneer @ Mar 21 2012, 11:59) *
А какой "гнутый" ассемблер возможно использовать?
Да он один - avr-as (линкер - avr-ld). Входит в состав GNU binutils. Для виндовса можно найти в собранном виде, с документацией и С/С++ компилятором впридачу в составе пакета WinAVR. Он же более свежей сборки - в виде Atmel AVR Toolchain.
ILYAUL
Цитата(Сергей Борщ @ Mar 21 2012, 13:31) *
Атмеловский ассемблер от AVRStudio такого не поддерживает. Возьмите гнутый ассемблер/линкир/все остальное из WinAVR, но исходники придется основательно перелопатить.

Что-то я не понял , что именно не поддерживает студийный asm?
Компановку отдельных файлов в один проект - поддерживает.
Порядок компановки файлов - тоже .
Поясните , плиз
Сергей Борщ
QUOTE (ILYAUL @ Mar 21 2012, 19:27) *
Компановку отдельных файлов в один проект - поддерживает.
Порядок компановки файлов - тоже .
Раздельное ассемблирование каждого ассемблерного исходника в объектный файл и последующую линковку. Атмеловский ассемблер позволяет лишь тупо свалить несколько исходников в один файл директивой include и затем ассемблировать полученный текст.
ILYAUL
Цитата(Сергей Борщ @ Mar 22 2012, 00:05) *
Раздельное ассемблирование каждого ассемблерного исходника в объектный файл и последующую линковку. Атмеловский ассемблер позволяет лишь тупо свалить несколько исходников в один файл директивой include и затем ассемблировать полученный текст.


А какая не всё равно, если объектные файлы линковщик на части разбить не сможет - в итоге получим тож на тож. Или нет?
К тому же в каждом проекте есть свой файл inc общий обычно для всех файлов проекта в целом . А Для каждого отдельного файла свой inc и свои назначния переменых , буфферов переменных и т.п.
zombi
Не понимаю зачем для авр вообще нужен линковщик.
Програмной памяти то не много. Неужели время трансляции напрягает?
_Артём_
Цитата(zombi @ Mar 21 2012, 22:41) *
Програмной памяти то не много. Неужели время трансляции напрягает?

Не, немного: 128kB-192kB-256kB..скоро обещают 384kB.

Цитата(zombi @ Mar 21 2012, 22:41) *
Неужели время трансляции напрягает?


Напрягает. 128кБ пересобирается за 1-2 минуты.
ILYAUL
Цитата(_Артём_ @ Mar 22 2012, 01:05) *
Напрягает. 128кБ пересобирается за 1-2 минуты.

Это что , проект на asm занимает 128к?
_Артём_
Цитата(ILYAUL @ Mar 22 2012, 10:37) *
Это что , проект на asm занимает 128к?


Нет проект на Си. А какая разница?
На асм он занимал бы килобайтов 80-100 (правда вряд ли бы его удалось написать).

zombi
Цитата(_Артём_ @ Mar 22 2012, 00:05) *
Напрягает. 128кБ пересобирается за 1-2 минуты.

Мой самый большой проектик занимает 370кБ в тексте и всего 8кБ в бине.
Точно время трансляции определить не смог.
Результат трансляции появляется практически одновременно с нажатием клавиши ентер.
Причём создается впечатление что львиную долю этого времени занимает вывод на экран результата.
Ну даже если предположить что время трансляции 8кБ = 0.1 сек то 128кБ должно длиться около 1.6 сек.
А 1-2 минуты ... я в шоке. wacko.gif
_Артём_
Цитата(zombi @ Mar 22 2012, 17:11) *
Мой самый большой проектик занимает 370кБ в тексте и всего 8кБ в бине.

Эко у вас сжимает.
Посмотрел проект: исходники ~900kB, bin - 126kB

Цитата(zombi @ Mar 22 2012, 17:11) *
Результат трансляции появляется практически одновременно с нажатием клавиши ентер.
Причём создается впечатление что львиную долю этого времени занимает вывод на экран результата.

На суперкомпьютере работаете?

Цитата(zombi @ Mar 22 2012, 17:11) *
А 1-2 минуты ... я в шоке. wacko.gif

Видимо IAR не может задействовать все ядра проца и HT.
Ну и асм быстрее транслировать.
zombi
Цитата(_Артём_ @ Mar 22 2012, 18:27) *
Эко у вас сжимает.

Дык, целая текстовая сторка превращается в несколько байт.
Цитата(_Артём_ @ Mar 22 2012, 18:27) *
Посмотрел проект: исходники ~900kB, bin - 126kB

Дык, строка это уже целая подпрограмма.
Цитата(_Артём_ @ Mar 22 2012, 18:27) *
На суперкомпьютере работаете?

Вроде нет:

Цитата(_Артём_ @ Mar 22 2012, 18:27) *
Ну и асм быстрее транслировать.

100-500
ILYAUL
zombi
Ну это Вы поскромничали - семь процессоров на борту. Я свои 7-мь ни разу не смог их загнать в ступор.

Но я так и не понял , зачем asm нужен линковщик , если уже команды условных переходов и коанды rcall, rjmp вносят ограничения на расположения остального кода зависящего от "возможностей" этих команд.
Да , include не очень оптимизирует код , но вот порядок подключения файлов позволяет подключить файлы использующие прерывания поближе к таблице прерываний , что даёт возможность заменить jmp на rjmp
zombi
Цитата(ILYAUL @ Mar 22 2012, 20:36) *
Ну это Вы поскромничали - семь процессоров на борту. Я свои 7-мь ни разу не смог их загнать в ступор.

А шо, у меня их семь? wacko.gif а я и не знал biggrin.gif
А про ступор и их загнать ниче не понял.
Цитата(ILYAUL @ Mar 22 2012, 20:36) *
Но я так и не понял , зачем asm нужен линковщик , если уже команды условных переходов и коанды rcall, rjmp вносят ограничения на расположения остального кода зависящего от "возможностей" этих команд.
Да , include не очень оптимизирует код , но вот порядок подключения файлов позволяет подключить файлы использующие прерывания поближе к таблице прерываний , что даёт возможность заменить jmp на rjmp

rcall/call, rjmp/jmp - сомнительная экономия обьёма кода для си трансляторов. biggrin.gif
_Артём_
Цитата(zombi @ Mar 22 2012, 19:15) *
rcall/call, rjmp/jmp - сомнительная экономия обьёма кода для си трансляторов. biggrin.gif

Там экономия скорее времени исполнения: не 3 цикла, а - 2 (rjmp).
А код не сэконошь: два байта после вектора остаётся , но куда их деть?

Цитата(ILYAUL @ Mar 22 2012, 18:36) *
Да , include не очень оптимизирует код , но вот порядок подключения файлов позволяет подключить файлы использующие прерывания поближе к таблице прерываний , что даёт возможность заменить jmp на rjmp

А что таки Си не позволяет разместить обработчик поближе к таблице векторов?

Цитата(zombi @ Mar 22 2012, 17:57) *
Дык, целая текстовая сторка превращается в несколько байт.
Дык, строка это уже целая подпрограмма.

Вы ж на асме пишете. Тогда - да.

zombi
Как сказать: у меня Atom 1.6GHz/1(или 2)GB RAM/2 ядра c HT
zombi
Цитата(_Артём_ @ Mar 22 2012, 21:22) *
Там экономия скорее времени исполнения: не 3 цикла, а - 2 (rjmp).
А код не сэконошь: два байта после вектора остаётся , но куда их деть?

При желании можно искользовать как константы например.
Цитата(_Артём_ @ Mar 22 2012, 21:22) *
А что таки Си не позволяет разместить обработчик поближе к таблице векторов?

Понятия не имею, но сомневаюсь что он в таблицу векторов rjmp поставит.
ILYAUL
Цитата(zombi @ Mar 22 2012, 21:15) *
А шо, у меня их семь? wacko.gif а я и не знал biggrin.gif
А про ступор и их загнать ниче не понял.

У Вас написано Intel Core I7 - что и означает семь процессоров на борту.
Загнать в ступор - нагрузить работой процессора так , что бы явно система начинала тормозить. Нагрузка процессора 100%. Максимум чего добился я - 80% - нагрузка сразу в несколько тестов 3-D графики.
Цитата(zombi @ Mar 22 2012, 21:15) *
rcall/call, rjmp/jmp - сомнительная экономия обьёма кода для си трансляторов. biggrin.gif

Так они и не экономят, поэтому и растут объёмы FLASH, ведь если СИ-ный asm хорошенько почистить , глядишь и 4к хватит на весь проект и Tiny 2313 biggrin.gif
Цитата
А код не сэконошь: два байта после вектора остаётся , но куда их деть?

Я думаю , что компилятор СИ так не поступит
Код
cbr        temp,0x0F;| Маскируем младшие биты данных в temp
        sbr        temp,1<<LCD_E;| $08;Устанавливем сигнал строба (Е) в one
        outr    LCD_PORT,temp;/ Выводим первый полубайт в порт
;+ И готовим второй , чтобы не ставить "тупые" NOP для задержки
        swap    temp1
        cbr        temp1,0x0F
        cbr        temp,0xF0
        cbi        LCD_Port,LCD_E;" Записываем данные в LCD


Но умные люди говорят , что можно ещё более сэкономить , я правда не заморачивался этим вопросом.
В одном из asm кодов от Си видел такие сочетания
Код
brne met1
met1: rjmp met2
met2 : ...........


Но вернёмся к теме , так нужен ли линковщик для asm?
_Артём_
Цитата(ILYAUL @ Mar 22 2012, 19:32) *
У Вас написано Intel Core I7 - что и означает семь процессоров на борту.

Вы к 1 апреля готовитесь?
P.S. Не процессоров, а ядер. Не 7, а 2-4-6.

Цитата(ILYAUL @ Mar 22 2012, 19:32) *
Так они и не экономят, поэтому и растут объёмы FLASH

Вы утверждаете что обработчики где-то далеко-далеко располагают?

Цитата(ILYAUL @ Mar 22 2012, 19:32) *
ведь если СИ-ный asm хорошенько почистить , глядишь и 4к хватит на весь проект и Tiny 2313 biggrin.gif

Безусловно, лет за 5-10 можно всё на асм переписать и оптимизировать (процентов на 10-50), Но кому оно тогда будет нужно?

zombi
Цитата(_Артём_ @ Mar 22 2012, 21:40) *
Не процессоров, а ядер. Не 7, а 2-4-6.

Да бог с ним сколько у него процов/ядер, главное шустрый и меня устраивает.
ЗЫ.А что такое 2-4-6?
Оный вроде как : четырехъядерный процессор поддерживает 8 вычислительных потоков и имеет дополнительную кэш-память 3-го уровня.
_Артём_
Цитата(zombi @ Mar 22 2012, 19:47) *
ЗЫ.А что такое 2-4-6?

В зависимости от модели либо 2 либо 4 либо 6 ядер.
zombi
Цитата(_Артём_ @ Mar 22 2012, 20:40) *
Безусловно, лет за 5-10 можно всё на асм переписать и оптимизировать (процентов на 10-50), Но кому оно тогда будет нужно?

Согласен. Время=деньги.

Цитата(ILYAUL @ Mar 22 2012, 20:32) *
Но вернёмся к теме , так нужен ли линковщик для asm?

Мне нет.
ILYAUL
Цитата(_Артём_ @ Mar 22 2012, 21:40) *
Безусловно, лет за 5-10 можно всё на асм переписать и оптимизировать (процентов на 10-50), Но кому оно тогда будет нужно?


Ну по этому поводу мы спорить не будем. Хотя asm имеет достаточно инструментов , что бы сократить время написания программ.

Я так понял , что никто не пробывал применять линковщик для asm?

Zombi:

Как на одном регистре сделать счётчик до 0x100 =256?
zombi
Цитата(ILYAUL @ Mar 25 2012, 20:35) *
Zombi:

Как на одном регистре сделать счётчик до 0x100 =256?

Варианты ответов:
A: сколько бит имеет регистр?
B: если нужно 256 состояний регистра и оный 8-ми битный то всё уже сделано.
ILYAUL
Цитата(zombi @ Mar 25 2012, 22:07) *
Варианты ответов:
A: сколько бит имеет регистр?
B: если нужно 256 состояний регистра и оный 8-ми битный то всё уже сделано.


8- бит =255 = 0xFF на 256-ом выставляется флаг zero, соответсвенно переход- и не учитывается.

Если вычислять среднее , то делая 256 отсчётов , в старшем регистре зарезервированного под вычисление среднего, сразу будет находится необходимое значение. И дополнительных действий по делению не требуется.

Всё , спасибо , решил
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.