Страница 4 из 4
Re: arduino и конденсатор
Добавлено: Вс окт 27, 2019 11:09:05
NStorm
goldenandy, в конкретно данном случае (обсуждаемом выше) дело не в static, а именно в inline. Не важно как, просто inline далеко не всегда становится inline. А в случае с оптимизацией -Os если вызывается из прерывания даже значительно больше кода занимает из-за того, что не инлайнится по факту.
Re: arduino и конденсатор
Добавлено: Вс окт 27, 2019 12:40:20
Eddy_Em
[uquote="goldenandy",url="/forum/viewtopic.php?p=3725587#p3725587"]И кто-нибудь, подскажите сакральный смысл static в определении функций в чистом Си (не ++)?[/uquote]
Если функция или переменная не-static, она будет иметь глобальную видимость, что может привести к косякам и UB. В лучшем случае линкер выругается, что в нескольких файлах переменная носит одно и то же имя и инициализирована.
Кроме того, читающему код сразу понятно: если функция объявлена static, она используется только в этом файле, а наружу не торчит. Если же она без static, ее можно будет вызвать откуда угодно (даже если ее объявления в заголовочном файле нет).
В случае же inline-функций все точно наоборот: их реализацию втыкают прямо в заголовочный файл, поэтому без static линкер, мягко говоря, охренеет, если будет собирать такое.. Но вот то, что вы сказали static inline, совершенно не гарантирует, что компилятор стопудово заинлайнит эту функцию! Как уже выше говорили, для этого нужен gcc'шный атрибут always_inline. В sdcc, кажись, такого атрибута нет — поэтому 5051, STM8, пики и некоторые другие МК — в пролете!
Re: arduino и конденсатор
Добавлено: Вс окт 27, 2019 14:16:50
GoldenAndy
Eddy_Em, Я всегда считал, что видимость у функций определяется наличием прототипа в заголовочном файле.
На что я неоднократно и нарывался, забывая прописать прототип в заголовочном файле....
Или имеется ввиду, что если объявить функцию static, то из других модулей к ней нельзя будет обратиться, даже задекларировав ее прототип как extern?
ЗЫ. Просто я наСИльник-самоучка, всю жизнь, начиная с 10 класса, был PASквилянтом.... И некоторые вопросы изучаю методом научного тыка. Про static -переменные знал. Но не думал, что это и к функциям относится....
Re: arduino и конденсатор
Добавлено: Вс окт 27, 2019 14:40:39
Eddy_Em
goldenandy, нет, без static они будут глобальными. Равно как и переменные. И если где-то объявить эту функцию, ее там можно и использовать (даже если в заголовочных файлах пусто). Аналогично с переменными: если где-то написали int x, забыв про static, из любого другого файла можно, заранее написав extern int x, обращаться к этой переменной.
goldenandy писал(а):Или имеется ввиду, что если объявить функцию static, то из других модулей к ней нельзя будет обратиться, даже задекларировав ее прототип как extern?
Именно так.
Re: arduino и конденсатор
Добавлено: Пн окт 28, 2019 11:45:20
oleg_4rk
[uquote="goldenandy",url="/forum/viewtopic.php?p=3725587#p3725587"]По "оптимальной схеме"
Господа, откуда тут будет плавное зажигание-угасание?[/uquote]
Да не, норм работает. Я правда не совсем так сделал:
- слева от R1 поставил диод (я пин с 1 на 0 переключаю)
- R1 10 КОм
- R2 убрал
- Конденсатор на 220 мкФ
Dimon456, Т.е. с точки зрения оптимизации gcc static в случае inline-функций - зло?
static тут ни при чём. Разговор про inline был

.
И кто-нибудь, подскажите сакральный смысл static в определении функций в чистом Си (не ++)?
Про это уже написали, вроде.
Добавлено after 5 minutes 15 seconds:
Прототип это информация для компилятора для контроля корректности вызова функции(все ли параметры указаны, правильный ли тип).
static - это для линкёра. Если в двух .o-файлах функции с одинаковым именем, то не понятно какую вызывать. Если же они static, то область видимости их ограничена .o-файлом. Вне его их не существует и пересечения имён не будет.
Добавлено after 2 minutes 13 seconds:
Т.е. можно провести такой эксперимент. Сделать прототип функции без задания функции и вызвать её из main. Скомпилировать. Компилятор создаст .o-файл без вопросов(т.к. эта функция наверняка в другом .o-файле будет - он не знает, что её нет). А вот линкёр, задача которого соединить все .o-файлы в единый бинарник уже, не найдя функции, которую вызывают, будет ругаться.
Re: arduino и конденсатор
Добавлено: Пн окт 28, 2019 18:25:37
GoldenAndy
oleg_4rk, спасибо за ликбез.
А по поводу емкости - да , оно будет работать и в случае каскада с общим эммитером. Только что бы добиться плавного зажигания - вы поставили аж 220 мкф.
И светодиод зажигается у вас за достаточно короткий период времени. Навскидку - где то за треть секунды. Поскольку конденсатору всего то и надо, что бы зарядиться до 0.7 вольта.
В случае эммитерного повторит еля зажигание светодиода у вас будет длиться в несколько раз дольше, поскольку вы не ограничиваете напряжение на конденсаторе переходом база-эммитер. Мало того, в случае схемы эммитерного повторителя вы еще получите и высокое входное сопротивление каскада, т.е. на процессы заряда-разряда конденсатора транзистор будет оказывать малое влияние.