roboforum.ru

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

"Слабое" объявление функций в AVRGCC

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: "Слабое" объявление функций в AVRGCC

Сообщение Romikgy » 10 янв 2011, 19:17

blindman писал(а):не, Ромик, ты ничего не понял. "Слабые" символы разрешаются на этапе компоновки, с перегрузкой не имеют ничего общего

тогда более подробно плз , для тех кто на бронепоезде...
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Re: "Слабое" объявление функций в AVRGCC

Сообщение blindman » 10 янв 2011, 20:02

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

Romikgy писал(а):на чистом си используют подмену адреса самой ф-ции , как с тем же прерыванием.... пишем свою ф-цию , берем ее адрес, и записываем на место вектора прерывания, так же можно поступать и с другими ф-циями

Для этого надо, чтобы вызов функции происходил через указатель на нее. Это во первых медленно, во вторых небезопасно (легко обойти контроль типов). При применении слабых символов, связывание имени с адресом происходит на этапе компоновки. И было бы интересно посмотреть, как ты будешь писать новые адреса векторов в флэш.
Michael_K писал(а):просто редкостная штука - мало кто в такие дебри лезет
На самом деле, используется очень часто, просто не все про это знают. В том же avr-gcc (а точнее avr-libc) все вектора прерываний слабо связаны с функцией bad_interrupt, а когда обработчики прерываний определяются в программе - используются эти новые функции.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: "Слабое" объявление функций в AVRGCC

Сообщение Michael_K » 10 янв 2011, 21:24

Ну так-то понятно, что используется... Просто "в дебри лезут" не многие.
Используют, не думая, как оно там внутри разбирается-собирается...
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: "Слабое" объявление функций в AVRGCC

Сообщение Romikgy » 10 янв 2011, 23:23

теперь понятно , что связывание идет на моменте компиляции , хотя по моему это через одно место ...
blindman писал(а):Для этого надо, чтобы вызов функции происходил через указатель на нее. Это во первых медленно, во вторых небезопасно (легко обойти контроль типов). При применении слабых символов, связывание имени с адресом происходит на этапе компоновки. И было бы интересно посмотреть, как ты будешь писать новые адреса векторов в флэш.

если смотреть в сторону разработок на авр то как правило проект делает один человек , и если он сам же в своем коде бочинит.....
про вызов через указатель ... откуда медленость ?
про запись во флеш , авр тоже умеет писать во флеш...
PS я в основном работаю с ARM ... так можно исполнять код отовсюду (почти ) имхо это его огромный плюс )))
PPS хотя мы отошли от темы ... за разъяснения спасибо ... интересно в кодовижени эти фичи юзать можно ? хотя к какому побу их применить еще не придумал )))
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Re: "Слабое" объявление функций в AVRGCC

Сообщение Michael_K » 10 янв 2011, 23:35

Romikgy писал(а):интересно в кодовижени эти фичи юзать можно ?

Наверняка это "специфично для компилятора". То есть такие фишки может и есть, но синтаксис не обязательно совпадает. По крайней мере я такого в стандартах не встречал... правда и не искал :)
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: "Слабое" объявление функций в AVRGCC

Сообщение blindman » 11 янв 2011, 05:49

Romikgy писал(а):если смотреть в сторону разработок на авр то как правило проект делает один человек

Это заблуждение
Romikgy писал(а):про вызов через указатель ... откуда медленость ?

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

В стандарте C слабые символы отсутствуют.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: "Слабое" объявление функций в AVRGCC

Сообщение Romikgy » 12 янв 2011, 01:38

спасибо за объяснения
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Пред.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17