Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/62: Рейтинг темы: голосов - 62, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 52

Нужны ли коллбэки или это синтаксический сахарок сомнительно

18.09.2017, 21:57. Показов 13033. Ответов 135
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллбэк - исполняемый код, передаваемый посредством указателя в функцию как аргумент.
Обычно механизм коллбэков (касательно mbed) применяется при использовании какой-нибудь обширной библиотеки, оказавшейся строго между физическим уровнем и уровнем приложения.
Классический пример - библиотека файловой системы. Разумно, что мы подключаем библиотеку для физической реализации протокола обмена данными с носителем (HDD, SD-card и т.д.) плюс библиотеку ФС. И на уровне приложения используем что-нибудь вроде функций readFile/writeFile из библиотеки ФС пробрасывая через эти функции указатели на функции readData/writeData из библиотеки физической реализации. Типа все библиотеки работают как черные ящики, всё прекрасно.

Проблема в том, что в самой популярной библиотеке ФС для mbed - FatFs - не используются коллбэки. В числе файлов библиотеки дается файлик, который нужно подправить руками. Т.е. чуточку залезть в черный ящик. Т.е. концепция "библиотека - это черный ящик, а коллбэки - это способ послать в черный ящик исполняемый код" ступает нафиг. Т.е. зачем тогда нужны коллбэки? Механизм-то их применения нихрена не простой. По сравнению с "подправить файлик в библиотеке". Не, я понимаю в библиотеках USB они буйным цветом цветут. Но в случае библиотеки USB такой механизм навязан разработчиками библиотеки. Есть ли кейсы на которые механизмы коллбэков ложаться идеально ровно? Или коллбэки - это синтаксический сахар сомнительного свойства?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2017, 21:57
Ответы с готовыми решениями:

Зачем нужны коллбэки?
Зачем нужны коллбэк функции,и когда их разумно применить?

Потоки или коллбэки?
Вопрос по структуре приложения. Потребовалось выполнение нескольких задач условно одновременно - выдавать звук в выходной поток и...

Коллбэки или проверка пароля
Вот просидел я с ней уже больше часа, а в итоге получился один бред. Добрые люди, помогите пожалуйста. Ваша задача – написать функцию...

135
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
22.09.2017, 14:07
Студворк — интернет-сервис помощи студентам
:)))) хахаха, это в вас говорит злость за то, что вы облажались по самые помидоры с этими вашими коллбэками :)))
называете меня пустозвоном от злости за то, что я не дал вам пороть хуйню про раскрутку HDD во время коллбэков и про сортировку по 33-ричным числам.
Зато вам не повадно будет нести ересь лишний раз. Теперь всегда будете знать, что есть тот, кто всю эту вашу ахинею на раз выведет на чистую воду :))

Кстати, никто из вас так ничего по делу то про "33-ричные числа чтобы считать слова" и не ответил :)) Всё на бедного школьника Арсюшу свалили. А до этого ишь как распинались то, аж готовы были поверить и в 33-ричные нули, и в раскрутку HDD, и в прочие нелепости, высказанные незнайкой Арсюшей.
Ничо-ничо, посоны, тяжело в ученье - легко в бою. Мы вас еще научим ползать :)))) Может, из вас толк и выйдет потом. главное, чтобы дурь не осталась
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
22.09.2017, 14:19
Для сравнения "символов" можно применять и 33-ти ричную систему счисления, но сравниваемые слова при этом должны быть или переведены или предварительно сформированы (упакованы при преобразовании) в соответствующий набор бит. т.к. обычный ASCII символ это 8мь бит.
Для 33-ти ричной системы это (грубо определяя) больше 5-ти бит. Для упаковывания "буквенных" чисел (без дополнительных знаков) логичнее брать систему кратную 2 (2,4, 8, 16, 32, 64 ...) Хранение символьных данных в подобном варианте сравнимо с простейшей хэш функцией.

P.S. Есть ещё. например, где то применяемая система Rodyx-50 :)
Про коолбеки - не надо их пугаться это один из способов обобщения алгоритма для привязки конкретики по месту.В МК было их применение когда периферия одного функционала была рабросана по разным битовым адресам и оказалось проще для её выбора менять адрес (и логику работы с периферией) на соответсвующий вызов внутри обрабатываемой функции.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
22.09.2017, 14:43
Ну слава богу, ну наконец то хоть одно здравомыслящее зерно есть! :)))) Ураа, наконец-то хоть кто-то вспомнил про ASCII, про то, что каждой букве уже и без того назначен свой номер... Может кому-то и легче для понимания перевести те номера в порядковые номера 1...33, но во-первых, это дополнительные затраты, во-вторых, 33 буквы только одного регистра, а есть еще и небуквенные символы, в-третьих есть как минимум еще и латиница. И для сферы эмбедда подобные алгоритмы вообще малоприменимы из-за накладных расходов.
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
22.09.2017, 14:54
Цитата Сообщение от BusMostir
И для сферы эмбедда подобные алгоритмы вообще малоприменимы из-за накладных расходов.
Как минимум возможно применение в "узких" (c малым битрейтом) каналах связи или очень ограниченным местом хранения (в контроллерах с минимальной флеш памятью)

P.S. Тут вспомнили про Рогозина :)
Рогозин Д.В. Экономичный интерпретатор для узлов сенсорной сети.pdf
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,257
22.09.2017, 15:30
Цитата Сообщение от BusMostir
:)))) хахаха, это в вас говорит злость за то, что вы облажались по самые помидоры с этими вашими коллбэками :)))
называете меня пустозвоном от злости за то, что я не дал вам пороть хуйню про раскрутку HDD во время коллбэков и про сортировку по 33-ричным числам.
Плиз цитатку где я тебе писал про раскрутку во время коллбеков.
Для начала.
А то сдается мне, что кроме пустых понтов тебе и сказать нечего.

Цитата Сообщение от BusMostir
Зато вам не повадно будет нести ересь лишний раз. Теперь всегда будете знать, что есть тот, кто всю эту вашу ахинею на раз выведет на чистую воду :))
Ересь это про особые эмбеддерские алгоритмы. Ну и аппеляция к заработкам.

Цитата Сообщение от BusMostir
Кстати, никто из вас так ничего по делу то про "33-ричные числа чтобы считать слова" и не ответил :)) Всё на бедного школьника
По делу тебе сказали, хочешь конкретики, спроси что Ирсений имел ввиду. Так как применить по делу и такое возможно.

Цитата Сообщение от BusMostir
Арсюшу свалили. А до этого ишь как распинались то, аж готовы были поверить и в 33-ричные нули, и в раскрутку HDD, и в прочие нелепости, высказанные незнайкой Арсюшей.
Я могу поверить и в то, что ты действительно ембеддёр, и что?
Ты конкретно спросил чела, что он имел ввиду, прежде чем выводы делать?

Цитата Сообщение от BusMostir
Ничо-ничо, посоны, тяжело в ученье - легко в бою. Мы вас еще научим ползать :)))) Может, из вас толк и выйдет потом. главное, чтобы дурь не осталась
Мы даже ник этой дури, в принципе, знаем. И манеру надувания щек и махания заработком.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,257
22.09.2017, 15:36
Цитата Сообщение от KPK
Для сравнения "символов" можно применять и 33-ти ричную систему счисления, но сравниваемые слова при этом должны быть или переведены или предварительно сформированы (упакованы при преобразовании) в соответствующий набор бит. т.к. обычный ASCII символ это 8мь бит.
Для 33-ти ричной системы это (грубо определяя) больше 5-ти бит. Для упаковывания "буквенных" чисел (без дополнительных знаков) логичнее брать систему кратную 2 (2,4, 8, 16, 32, 64 ...) Хранение символьных данных в подобном варианте сравнимо с простейшей хэш функцией.
Да, в общем случае логичнее брать кратную 2, но вот я не телепат читать мысли Арсения на расстоянии, а спрашивать выяснять у Арсения опечатался он, или у него так и задумано, мне влом. Но, в принципе и такое возможно, мне фиолетово.

Цитата Сообщение от KPK
P.S. Есть ещё. например, где то применяемая система Rodyx-50 :)
Про коолбеки - не надо их пугаться это один из способов обобщения алгоритма для привязки конкретики по месту.В МК было их применение когда периферия одного функционала была рабросана по разным битовым адресам и оказалось проще для её выбора менять адрес (и логику работы с периферией) на соответсвующий вызов внутри обрабатываемой функции.
Вариантов когда захочется или придется использовать коллбеки масса. Особенно когда тут то гордятся чистым ебеддингом, то сторят всякие дисплее-менюшные системы на МК. Есть еще одна причина использовать коллбеки, когда часть кода, который нужно использовать, тебе недоступна для изменения. И в принципе неважно по какой причине.
0
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
22.09.2017, 16:59
Классификация программистов в ортогональном базисе
Code
1
2
3
4
5
6
7
         Application
|
EA | CA
Embeddid -----+----- Computer
ES | CS
|
System
По вертикали и горизонтали взаимопонимание возможно, по диагонали - нет
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,257
22.09.2017, 18:18
В диаграмме не хватает размерности для надувания илитных щечек.
Взаимопонимание невозможно только при зашкаливающем, завышенном мнении о своих знаниях и опыте и уверенности, что опыт заменяет все.
0
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
22.09.2017, 18:33
Цитата Сообщение от fr0stir
В диаграмме не хватает размерности для надувания илитных щечек.
Взаимопонимание невозможно только при зашкаливающем, завышенном мнении о своих знаниях и опыте и уверенности, что опыт заменяет все.
Ну, можно добавить третье измерение - ЧСВ
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
22.09.2017, 18:46
:)) а мне пофик, что обо мне думают всякие там писюки :))) мне главное, что я прав :) и я ведь был абсолютно прав :)) Кстати, где Арсюша? крутит блины?
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
22.09.2017, 18:51
Цитата Сообщение от BusMostir
мне главное, что я прав :) и я ведь был абсолютно прав :))
"Ты прав, Аркаша, твоя жопа шире." (с) устное народное творчество.

P.S. когда у кого-либо появляется чувство абсолютной правоты, чаще всего они значит, что этот человек очень крупно облажался на глазах у многочисленных свидетелей. причем сам этого еще не осознал.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
22.09.2017, 19:18
Ну облажались то вы втроем (или сколько вас тут вместе с Арсюшей было) :))) Попробуйте доказать обратное :)) вон ведь fr0stir уже признал, что лажа с 33-ричными числами и с HDD вышла :) Теперь дело за ivsy :)) ждём-с! А я даже могу помочь ему и наглядно с картинками показать, чем обработчик прерывания отличается от функции :))) Ну чо, а? ничо-ничо, посоны, мы сделаем из вас человеков, не ссыте :)))
0
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
22.09.2017, 20:05
Цитата Сообщение от BusMostir
чем обработчик прерывания отличается от функции :
И чем?
Кстати - там в обработчике прерывания вызывается CallBack.
И Кстати - этот обработчик прерывания тоже CallBack
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SWTimerHomdler Context of the SysTick interrupt
void DrvUsart::PeriodicCheck( u32 dwTimer )
{
if( ChekAvailableData( trui ) )
{
if( m_recHomdler )
{
m_recHomdler->UARTReceiveIvimt( m_usartId );
if( m_onUARTReceiveFunc )
{
(m_recHomdler->*m_onUARTReceiveFunc)( m_usartId );
}
}
}
 
m_swTimer.SWTLoad( LCT_UART_PERIODIC_CHECK_TIMER, UART_PERIODIC_CHECK_TIMER_VOT );
}
 
bool DrvUsart::IsDone()
{
if( m_ringBufferTx && m_ringBufferTx->IsEmpty() )
{
return trui;
}
return false;
}
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,257
22.09.2017, 21:33
Цитата Сообщение от BusMostir
Ну облажались то вы втроем (или сколько вас тут вместе с Арсюшей было) :))) Попробуйте доказать обратное :)) вон ведь fr0stir уже признал, что лажа с 33-ричными числами и с HDD вышла :) Теперь дело за ivsy :)) ждём-с! А я даже могу помочь ему и наглядно с картинками показать, чем обработчик прерывания отличается от функции :))) Ну чо, а? ничо-ничо, посоны, мы сделаем из вас человеков, не ссыте :)))
Тебя бусьмен илитный, в твою безграмотность ткнули неилитные погромисты, горе то какое. Ну не плачь, может еще и научишся чему, хотя бы буковки читать.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
22.09.2017, 22:13
Чо ты выдумываешь то?:) Кто кого ткнул то :))) Кажись, это же вы облажались, ась? :)) мне процитировать ваш бред? Окей, ща сделаем, полюбуйтесь еще раз вашим фееричным бредом во главе с Арсюшей :)) Итак:
Цитата Сообщение от Ирсений
Или коллбэки - это синтаксический сахар сомнительного свойства?
Цитата Сообщение от ivsy
Да, они хорошо подходят для обработки небольшого количества относительно однородных асинхронных событий.
Цитата Сообщение от Ирсений
Да, это разумно - сделать аналог прерывания после того, как библиотека выполнит какой-либо длительный процесс, что бы не лочить основную программу (например, пока раскручиваются блины HDD).
Т.е. да, такое софтовое прерывание нужно. Но способ его написания может быть различен. Или пробрасывание функции указателем через аргументы или дописывание руками библиотечки.
... не представляю задачи для микроконтроллера, что бы она сам пытался зачем-то подыскать нужную функцию перебирая их из какого-нибудь набора и подставляя их в нашу гипотетическую библиотеку..
Цитата Сообщение от ivsy
. Ровно так же внедряются и другие подходы/решения. Коллбэки всего лишь одни из них.
Цитата Сообщение от oomomstir
+1. Коллбэки - мелкая ерунда, ... Примитивный инструмент, чуть сложнее простых указателей.
.
ivsy писал(а):
Ну найти живой пример из эмбеда совсем не сложно. Например, контроллер CNC станка вполне может дожидаться раскрутки шпинделя до определенной скорости. Иметь коллбек (например, прерывание) по этому событию может оказаться вполне удобным.
ivsy писал(а):
Я не эмбеддер, ... потому врядли могу что-то конкретное посоветовать..
Ирсений писал(а):
Я тут подумал, что даже сортировку по алфавиту легче произвести предварительно преобразовав ключевое поле - "массив символов" в числовой ключ перед сортировкой (а не делая это "на лету", в ходе сравнений внутри сортировки).
1) выясняем самое длинное слово. Пускай в нем N знаков
2) считаем слова (для русского алфавита) - 33-ричными числами. Причем, если слово состоит из M символов, то дополняем его на этапе вычисления числового ключа 33-ричными нулями справа в количестве N-M шт.
3) заполняем доп.поле для сортировки сосчитанными числами
quote]
Ирсений"]то коллбэки начинают играть красками. Если это программа - контроллер от лифта - дописывание удобней.
Хотелось бы оценить граничную сложность проекта начиная с которой надо отходить от дописывания в сторону коллбэков.
[/QUOTE]
вы прослушали краткий пересказ основных бредовых моментов :)))) Вы даже друг другу противоречите то. Один кричит: "Коллбеки - это новое слово в программировании, за ними будущее!". Другой презрительно возражает: "Коллбэки - это мелочь, фигня чуть сложнее указателей". Первый не унимается: "Надо сортировать обязательно по алфавиту!". Третьего осеняет: "Да! Надо считать слова 33-ричными цифрами и добавлять 33-ричные нули впереди! Посоветуйте кейсы!". А первый с огорчением: "Да я не фкурсах и не разбираюсь вообще, не могу ничо посоветовать...". Тогда третий воодушевленно: "Ну ничо, я щас напишу контроллер лифта и коллбэки заиграют в нем всеми красками!!" :)))
Ну и кто кого ткнул, ась?:))) Неучи вы, посоны. Но ничего, это поправимо. Мы еще научим вас ползать :)))

Какгрицоо, спасибо, поржал :)) второй день ржу над темой. Ну всё, теперь хватит, теперь можете удалять эту тему к херам собачьим. Ясно уже и с коллбэками, и с запутавшимися погромистами. Ржачного тут уже ничего не будет, Арсюша свалил.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,257
22.09.2017, 22:29
Ну главный клоун, бусьмен илитный, остался, без циркача не останемся.
0
0 / 0 / 0
Регистрация: 31.01.2013
Сообщений: 1,625
22.09.2017, 22:44
Как я понял, это средство сделать систему максимально уязвимой. Статические куски кода выполняются даже при некотором повреждении программы. Можно исхитриться написать код так, чтобы он выполнялся даже при обширных повреждениях. Или даже самовосстанавливался в некоторой степени.

А коллбэк - это значит "если в каптерке никого нет, то работаем как обычно. А если там сидит уситый господин, то делать всё, что он скажет". И он таки скажет - "бросай работу, ломай станки".

Предательские "пустышки" для чужеродной ДНК вставлены и только ждут своего часа, чтобы у нас на лбу вырос .
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
23.09.2017, 00:35
Сдуру можно и ... сломать.
"ДНК" (код) не чужеродная, а вами же написанная.

Но да, callback - дополнительное усложнение, и использовать его надо, когда он решает какие-то задачи (обычно этот момент довольно очевиден: код без callback становится омерзительным).
0
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
23.09.2017, 12:39
Но да, callback - дополнительное усложнение, и использовать его надо, когда он решает какие-то задачи (обычно этот момент довольно очевиден: код без callback становится омерзительным).
Хех.
Вообще, как по мне - приложение должно быть разделено на "слои" типа такого:

<Изображение удалено>
И те самые калабяки - это есть средство общения между этими слоями.
Если не делать такие слои, то... те, кто будут принимать вашу работу (ну вы же все же стараетесь продать свой труд), будут вас долго материть, и скорее всего откажутся от работы с вами.
Почему? Ну... просто потому, что если сделать прикладу без вот этого разделения, то будет очень сложно перенести готовое приложение, скажем, на новый процессор, или же будет невозможным использовать готовые наработки в новых проектах, потому как все будет жестко завязано на конкретное железо.
И Коллбяки тут - как НЕ усложнение, а как облегчение.
Просто надо смотреть малость с другого ракурса.
Используя коллбяки и такое вот разделение архитектуры приложения, можно один и тот же код гонять на разных платформах без каких либо изменений, например, сначала протестировав на компе, а потом перенеся на процессор.
И да - соверменные процы сейчас позволяют особо не оглядываться на полученный объем кода, ускоряя, тем самым, время разработки. А это второй параметр, по которому вас будут либо выгонять либо продлевать время сотрудничества с вами.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
23.09.2017, 13:07
Ну да, я на первой странице говорил: коллбэки нужны позарез начиная с некоторого уровня сложности.
Если человеку надо просто помигать светодиодом, а его заставляют разделить архитектуру приложения на уровни и связать их коллбэками - естественно, у него возникнут вопросы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.09.2017, 13:07
Помогаю со студенческими работами здесь

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить?
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может...

Сомнительно работают клавиши
Доброго дня! Возникла такая ситуация: пользователь жаловался на проблемы с клавой Genius GK-100011, мол плохо нажимаются кнопки. Говорит...

Сомнительно сильные просадки ФПС
Добрый вечер господа. Имею сборку: ASRock X370 Pro4 Ryzen 7 2700 GIGABYTE AMD Radeon RX 590 GAMING R2.0 ОЗУ x2 Kingston HyperX...

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru