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

 
 
> Линковщик
cannoneer
сообщение Mar 20 2012, 16:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 10-06-11
Пользователь №: 65 609



Доброго времени суток. Пишу программу для AVR микроконтроллеров на ассемблере. Нужно скомпоновать объектные файлы. Как это можно сделать? На сколько я понимаю, для этого нужен линковщик. Но какой??
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 29)
zombi
сообщение Mar 20 2012, 16:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(cannoneer @ Mar 20 2012, 19:04) *
Нужно скомпоновать объектные файлы.

А объектные файлы чем созданы?
Go to the top of the page
 
+Quote Post
Leopoldius
сообщение Mar 20 2012, 22:10
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 23-03-11
Из: Россия
Пользователь №: 63 824



На каком ассемблере. Телепатия не помогает увы...

Если вы о Авр студии то на выходе получаете файл, который зашивается в МК, если о чем то другом пытаетесь спросить... то пожалуйста - приоткройте завесу тайны... Поподробнее что ли
Go to the top of the page
 
+Quote Post
cannoneer
сообщение Mar 21 2012, 07:49
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 10-06-11
Пользователь №: 65 609



Использую ассемблер для AVR. Компилятор от AVR Studio (avrasm32.exe). Самим AVR Studio не пользуюсь. Использую программу Tavrasm, которая и запускает компилятор; объектные файлы создаю тоже с ее помощью. Основная идея - разбить программу на отдельные модули, каждый из которых сохраняется в отдельном файле и отдельно компилируется; объединение должно происходить на этапе компоновки.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 21 2012, 09:31
Сообщение #5


Гуру
******

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



Атмеловский ассемблер от AVRStudio такого не поддерживает. Возьмите гнутый ассемблер/линкир/все остальное из WinAVR, но исходники придется основательно перелопатить.


--------------------
На любой вопрос даю любой ответ
"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
cannoneer
сообщение Mar 21 2012, 09:59
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 10-06-11
Пользователь №: 65 609



Спасибо за ответ. Жаль что не поддерживает. А какой "гнутый" ассемблер возможно использовать?
Go to the top of the page
 
+Quote Post
hd44780
сообщение Mar 21 2012, 10:16
Сообщение #7


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



В WinAvr-е есть и компилятор С, и ассемблер, и линковщик.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 21 2012, 10:42
Сообщение #8


Гуру
******

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



QUOTE (cannoneer @ Mar 21 2012, 11:59) *
А какой "гнутый" ассемблер возможно использовать?
Да он один - avr-as (линкер - avr-ld). Входит в состав GNU binutils. Для виндовса можно найти в собранном виде, с документацией и С/С++ компилятором впридачу в составе пакета WinAVR. Он же более свежей сборки - в виде Atmel AVR Toolchain.


--------------------
На любой вопрос даю любой ответ
"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
ILYAUL
сообщение Mar 21 2012, 17:27
Сообщение #9


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Сергей Борщ @ Mar 21 2012, 13:31) *
Атмеловский ассемблер от AVRStudio такого не поддерживает. Возьмите гнутый ассемблер/линкир/все остальное из WinAVR, но исходники придется основательно перелопатить.

Что-то я не понял , что именно не поддерживает студийный asm?
Компановку отдельных файлов в один проект - поддерживает.
Порядок компановки файлов - тоже .
Поясните , плиз


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 21 2012, 20:05
Сообщение #10


Гуру
******

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



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


--------------------
На любой вопрос даю любой ответ
"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
ILYAUL
сообщение Mar 21 2012, 20:26
Сообщение #11


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



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


А какая не всё равно, если объектные файлы линковщик на части разбить не сможет - в итоге получим тож на тож. Или нет?
К тому же в каждом проекте есть свой файл inc общий обычно для всех файлов проекта в целом . А Для каждого отдельного файла свой inc и свои назначния переменых , буфферов переменных и т.п.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 21 2012, 20:41
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Не понимаю зачем для авр вообще нужен линковщик.
Програмной памяти то не много. Неужели время трансляции напрягает?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 21 2012, 21:05
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



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

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

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


Напрягает. 128кБ пересобирается за 1-2 минуты.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 22 2012, 08:37
Сообщение #14


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



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

Это что , проект на asm занимает 128к?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 22 2012, 11:37
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



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


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

Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 22 2012, 15:11
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



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

Мой самый большой проектик занимает 370кБ в тексте и всего 8кБ в бине.
Точно время трансляции определить не смог.
Результат трансляции появляется практически одновременно с нажатием клавиши ентер.
Причём создается впечатление что львиную долю этого времени занимает вывод на экран результата.
Ну даже если предположить что время трансляции 8кБ = 0.1 сек то 128кБ должно длиться около 1.6 сек.
А 1-2 минуты ... я в шоке. wacko.gif
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 22 2012, 15:27
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(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.
Ну и асм быстрее транслировать.
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 22 2012, 15:57
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(_Артём_ @ 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
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 22 2012, 16:36
Сообщение #19


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



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

Но я так и не понял , зачем asm нужен линковщик , если уже команды условных переходов и коанды rcall, rjmp вносят ограничения на расположения остального кода зависящего от "возможностей" этих команд.
Да , include не очень оптимизирует код , но вот порядок подключения файлов позволяет подключить файлы использующие прерывания поближе к таблице прерываний , что даёт возможность заменить jmp на rjmp

Сообщение отредактировал IgorKossak - Mar 23 2012, 10:03
Причина редактирования: бездумное цитирование


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 22 2012, 17:15
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(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
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 22 2012, 17:24
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(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

Сообщение отредактировал IgorKossak - Mar 23 2012, 10:04
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 22 2012, 17:29
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



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

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

Понятия не имею, но сомневаюсь что он в таблицу векторов rjmp поставит.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 22 2012, 17:32
Сообщение #23


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(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?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 22 2012, 17:40
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(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), Но кому оно тогда будет нужно?

Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 22 2012, 17:47
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



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

Да бог с ним сколько у него процов/ядер, главное шустрый и меня устраивает.
ЗЫ.А что такое 2-4-6?
Оный вроде как : четырехъядерный процессор поддерживает 8 вычислительных потоков и имеет дополнительную кэш-память 3-го уровня.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 22 2012, 18:06
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(zombi @ Mar 22 2012, 19:47) *
ЗЫ.А что такое 2-4-6?

В зависимости от модели либо 2 либо 4 либо 6 ядер.
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 24 2012, 18:20
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



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

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

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

Мне нет.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 25 2012, 17:35
Сообщение #28


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



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


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

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

Zombi:

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


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 25 2012, 18:07
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(ILYAUL @ Mar 25 2012, 20:35) *
Zombi:

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

Варианты ответов:
A: сколько бит имеет регистр?
B: если нужно 256 состояний регистра и оный 8-ми битный то всё уже сделано.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 25 2012, 18:19
Сообщение #30


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



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


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

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

Всё , спасибо , решил


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

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

 


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


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