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

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

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

Сообщение Michael_K » 08 янв 2011, 23:34

Есть ли оно?

Добавлено спустя 3 часа 59 минут 36 секунд:
В общем, оказалось, что есть, только какое-то ущербное.
Баг признан.
http://www.nongnu.org/avr-libc/bugs.html
http://sourceware.org/bugzilla/show_bug.cgi?id=1038
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение blindman » 09 янв 2011, 06:22

Как я понял, баг этот касается лишь объявления вершины стэка, с собственно слабыми символами он общего не имеет
Проект [[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 » 09 янв 2011, 06:52

Ну, значит я что-то делаю не так...

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

Примера нигде не нашел.
Пробовал аттрибуты weak и alias, и вместе, и по отдельности и т.п.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение blindman » 09 янв 2011, 08:42

Show me the code :)
Проект [[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 » 09 янв 2011, 14:35

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

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

Сообщение Michael_K » 09 янв 2011, 16:00

blindman писал(а):Show me the code :)

Хорошая шутка - там кода-то две с половиной строчки.

В общем заработало вот в таком варианте:

Код: Выделить всё
weak.c
==============================================
#include <avr/io.h>
void __attribute__((weak)) f(unsigned char c)
{
   PORTB = c;
}

strong.c
==============================================
#include <avr/io.h>
void f(unsigned char c)
{
   PORTС = c;
}

main.c
==============================================
extern void f(unsigned char c);
void main(void)
{
   f(10);
}


в варианте из даташита:
Код: Выделить всё
void f (unsigned char c) __attribute__ ((weak, alias ("__f")))

ругается на синтаксис.

Romikgy писал(а): а что есть слабая функция?

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

Ну, как-то так :)
(Я не программист, если что - в точных терминах могу путаться.)

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

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

Сообщение Duhas » 09 янв 2011, 16:14

жосский офф, но таки:

я вот балдею с сей и прочего.. напридумывали столько, что изучать будешь всю жизнь.. не знаю прав я или нет.. но мне такой путь усложнения языка кажется мертвым...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

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

Сообщение Michael_K » 09 янв 2011, 16:44

А мне кажется мертворожденными современные дергания.
Вот пока эд будет под "android 2.1" что-то ковырять, у всех уже будет "humanoid 3.5" :)
А время жизни проекта в непотребительских областях (вояки, пром, СХ) - хоть и сокращается, но все равно это десятки лет.

Считаю, что нужно качественно научиться хотя бы чему-то одному, а не бросаться на каждую блестящую рекламку. Помните, как все рекламировали Джаву для интернет-приложений? и где она теперь? Флэш ее вытеснил. А до этого, если помните, был макромедиа шоквейв... и где теперь тот шоквейв. Сейчас майкрософт двигает Сильверлайт, но где он будет, когда прийдет HTML5?

Точно так же перспективы андроида, например, по-моему крайне туманны.

Добавлено спустя 4 минуты 9 секунд:
Duhas писал(а):но мне такой путь усложнения языка кажется мертвым...

А какой путь усложнения языка вам кажется живым? :wink: :D
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение Grem » 09 янв 2011, 17:17

Помните, как все рекламировали Джаву для интернет-приложений? и где она теперь?

Бугагашеньки, у меня аж слезы от смеха потекли, а от сравнерия JEE и флеша - ресницы поседели. Где она? Вы серьезно? Она натянула все другие _недоязыки_ в этой области.
И да, хтмл5 уже несколько лет есть, вот что вы под этими буквами подразумеваеие - другое дело.
На мое сообщение отвечать не надо - отвечать не стану. Просто очень забавно вы сравнили тостер с мазератти, а потом с оставшимся хламом в гараже.
"There is nothing better than sliding down snow and flying through the air" (с) Shane McConkey.
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.
Аватара пользователя
Grem
 
Сообщения: 1530
Зарегистрирован: 16 май 2009, 12:50
Откуда: Россия
прог. языки: Java, C

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

Сообщение Виталий » 09 янв 2011, 18:28

Считаю, что нужно качественно научиться хотя бы чему-то одному, а не бросаться на каждую блестящую рекламку.

Я согласен. Производители просто бомбардируют нас все новыми и новыми технологиями и при этом получается так, что программисту "не поднять головы", насколько быстро все меняется.
Но и все же появляются новые и интересные технологии, которые стоит брать на вооружение.

но мне такой путь усложнения языка кажется мертвым...

Я считаю, что для встраиваемых систем уже пришло время более современных языков нежели чем Си.
Одним из самых удачных языков для реализации на микроконтроллере я считаю Оберон. Он очень компактен, позволяет использовать несколько парадигм программирования, имеет жесткую типизацию и автоматическую сборку мусора.

Хотя у меня есть некоторые соображения как модифицировать Оберон так, чтобы он был пригоден для реализации супер-надежных систем.

Добавлено спустя 1 минуту 17 секунд:
Она натянула все другие _недоязыки_ в этой области.

Видимо имелось ввиду технология JavaApplet.
Все новости о моих проектах http://savethebest.ru
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

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

Сообщение Michael_K » 09 янв 2011, 19:42

Виталий писал(а):Но и все же появляются новые и интересные технологии, которые стоит брать на вооружение.

Конечно, просто они часто сырые или непродуманные, в результате запуск этих технологий получается "кривым", растянутым, невнятным. Часто ценные фишечки, находки, идеи просто гибнут под горой неудобств, багов, несовместимости и т.п.
Производители ставят цель быстро выйти на рынок - на полноценное тестирование уже просто откровенно забивают, ("кагбе" думая, что пользователи за них оттестируют и пришлют им репорты или багфиксы)... Но пользователь не торопится обкатывать, а тем более полноценно тестировать чужое г... у него есть выбор и ему тоже надо свой продукт на рынок выплюнуть - вот он и "голосует ногами"...

Одним из самых удачных языков для реализации на микроконтроллере я считаю Оберон.

Может быть. Тут нужно понимать, что микроконтреллеры - эта такое разношерстное понятие. И часто в одном и том же проекте приходится программировать на НУ ОЧЕНЬ разных уровнях. Где-то спускаться до ассемблера, переписывания стартап-кодов, низкоуровневых обработчиков и т.п. А где-то наоборот сильно абстрагироваться (например в пользовательском интерфейсе или сетевых протоколах).
Я не думаю, что можно предложить какое-то единое средство, си пока достаточно удачно спозиционировался для мелких применений с углублением к железу. Для более высокого уровня его, конечно, маловато (примочки, конечно, появляются, но, имхо, выглядят достаточно искуственными костылями).

Видимо имелось ввиду технология JavaApplet.

Да, конечно. То что на веб страничках исполняется в окне браузера.
Я и не спорю, что некоторые другие применения джавы - гораздо более успешны - те же телефоны, например. (Хотя там и всплывают свои проблемы).
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение blindman » 10 янв 2011, 07:47

Michael_K писал(а):там кода-то две с половиной строчки.

Можно и полстрочки по-разному написать

"В варианте из даташита" пишется вот так:
Код: Выделить всё
main.c
=================
extern void f(void);
int main(void)
{
   f();
   for(;;);
}

strong.c
=================
void f (void)
{
   PORTB = 0x55;
}

weak.c
=================
void f (void) __attribute__ ((weak, alias ("__f")));

void __f(void)
{
   PORTB = 0xAA;
}
Проект [[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 » 10 янв 2011, 13:47

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

Ну, как-то так :)
(Я не программист, если что - в точных терминах могу путаться.)

Ну например - обработчик прерываний. Вот он есть какой-то "по умолчанию", а ты можешь его переопределить на свой. Это совсем не новшество... просто редкостная штука - мало кто в такие дебри лезет.

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

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

Сообщение blindman » 10 янв 2011, 14:16

не, Ромик, ты ничего не понял. "Слабые" символы разрешаются на этапе компоновки, с перегрузкой не имеют ничего общего
Проект [[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, 14:55

blindman писал(а):Можно и полстрочки по-разному написать

Можно - вот я их и переписывал по-разному. Только зачем же в данном случае на мои 50 неправильных вариантов смотреть?

Я бы понял, если б там было две страницы кода, в которые где-то вкралась маленькая ошибочка...

blindman писал(а):"В варианте из даташита" пишется вот так:

О! Спасибо!
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

След.

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

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

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