roboforum.ru

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

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

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

Romikgy » 10 янв 2011, 19:17

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

тогда более подробно плз , для тех кто на бронепоезде...

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

blindman » 10 янв 2011, 20:02

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

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

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

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

Michael_K » 10 янв 2011, 21:24

Ну так-то понятно, что используется... Просто "в дебри лезут" не многие.
Используют, не думая, как оно там внутри разбирается-собирается...

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

Romikgy » 10 янв 2011, 23:23

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

если смотреть в сторону разработок на авр то как правило проект делает один человек , и если он сам же в своем коде бочинит.....
про вызов через указатель ... откуда медленость ?
про запись во флеш , авр тоже умеет писать во флеш...
PS я в основном работаю с ARM ... так можно исполнять код отовсюду (почти ) имхо это его огромный плюс )))
PPS хотя мы отошли от темы ... за разъяснения спасибо ... интересно в кодовижени эти фичи юзать можно ? хотя к какому побу их применить еще не придумал )))

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

Michael_K » 10 янв 2011, 23:35

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

Наверняка это "специфично для компилятора". То есть такие фишки может и есть, но синтаксис не обязательно совпадает. По крайней мере я такого в стандартах не встречал... правда и не искал :)

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

blindman » 11 янв 2011, 05:49

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

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

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

В стандарте C слабые символы отсутствуют.

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

Romikgy » 12 янв 2011, 01:38

спасибо за объяснения


Rambler\'s Top100 Mail.ru counter