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

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

18.09.2017, 21:57. Показов 13046. Ответов 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
Регистрация: 20.07.2012
Сообщений: 620
26.09.2017, 18:20
Студворк — интернет-сервис помощи студентам
Товарищи. Тонко намекаю, что вы все еще можете спросить меня о том, почему коллбэк и прерывание суть вещи одной природы, и что в этом случая я донесу до вас их общность.
0
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
26.09.2017, 18:30
Так очевидно же. В ядре ARM предусмотрено несколько наборов регистров общего назначения для каждого режима работы процессора. Те регистры, в которые вы смотрите в прерывании - это совсем не те регистры, в которые вы клали свои значения, а те, которые используются в режимах IRQ, или же FIQ.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
26.09.2017, 18:33
??? Нехилый поворот событий. А где в программинг манулае или в мануале ядра Кортекс написано, что у РОН есть копии?
Сдается мне, что вы, любезнейший, читали-читали, да недочитали всё-таки.. Давайте вы быстренько прочтете это, а я сделаю вид, что не видел того вашего поста. Чтобы потом вам стыдно то не было...

Вы сути не поняли, любезнейший. Значения из регистров затираются не в момент вызова прерывания, а в любой момент нормальной работы проги, поскольку РОН используются основным текстом проги, пока ожидается прерывание.
Это и есть ответ на мой вопрос.
0
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
26.09.2017, 18:35
Ок. Попытка не удалась.
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
26.09.2017, 18:39
Цитата Сообщение от BusMostir
Ответьте лучше на вопрос, куда делись параметры из регистров (выше по тексту задача) :)))
Даже не знаю, плакать или смеяться. Вы вообще не поняли, что я имел в виду.
Цитата Сообщение от BusMostir
будет интересно послушать "начальника транспортного цеха"
Да вас тут слушать не переслушать.
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
26.09.2017, 18:40
Цитата Сообщение от BusMostir
Вы сути не поняли, любезнейший.
Вообще-то вы ее не поняли. Что, впрочем, было ожидаемо.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
26.09.2017, 18:49
ну ладно, расскажите нам, что вы там представляли себе, что там имели ввиду? :)))
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
26.09.2017, 19:00
Попкорн закуплен.
Ждём появления shadow core rikystir set и shadow GPR set доступные юзеру...
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
26.09.2017, 21:03
Цитата Сообщение от BusMostir
ну ладно, расскажите нам,
Вы размножились?
Цитата Сообщение от BusMostir
что вы там представляли себе, что там имели ввиду? :)))
Вам все равно не поможет.
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
26.09.2017, 21:04
Цитата Сообщение от dosykus_2
Попкорн закуплен.
Вы даже не представляете как давно. Наблюдать вас и остальную автобусную илиту это такой цирк...
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
27.09.2017, 19:36
Таки ви запомятовали ?
Где же они????
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 249
04.10.2017, 01:01
классная тема :)))
с удовольствием прочитал.

Речь даже о паттернах заходила...паттерны тоже изучаю помаленьку(для понимания общей картины мира программирования), но вообще не понимаю как их можно применить в МК. вернее можно наверно, но тогда это будет тоже самое что десктопные программы писать на ассемблере. т.е. можно наверно, но думаю крайне неудобно и не рационально.
Паттерны нужды для нормального программирования для ПК , там они оправданы и полезны (хотя тоже не святой грааль) . Так же думаю их можно использовать в системах где есть какая то операционная система и нет требования к точности работы в реальном времени. имхо.
0
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
04.10.2017, 08:10
Цитата Сообщение от BusMostir
Ответьте лучше на вопрос, куда делись параметры из регистров
Вы их сами затёрли, своим бесконечным бесполезным циклом. Кстати странно что он выполнялся.
Для ARM ядра.
Параметры в прерывание предавать можно, но не во все и не всегда. Прежде всего прерывание должно иметь самый низкий приоритет, и быть единственным с этим приоритетом. Второе - ждать прерывание не имеет смысла, его нужно вызывать самостоятельно. По сути это аналог запрета прерываний, код вашей функции будет выполняться вне зависимости от внешней очереди в поликлинику. Однако в этом случае все желающие только спросить - смогут зайти после вас, с сохранением очереди и уровня статуса. Главное - короткие прерывания не теряются как в случае запрета.
Параметры передаются через регистры, отдаются через стек. Для чипов st это прерывание SVC, идеальное решение для переключения контекста и приоритетного выполнения кода.

Насчёт калабков. Уже шестая страница без примеров реального кода. Шесть страниц слепцы щупают слона в темноте, и не могут определится с его формой. Слону в некоторый момент стало приятно.
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
04.10.2017, 08:21
Цитата Сообщение от Otomys-dm
паттерны тоже изучаю помаленьку(для понимания общей картины мира программирования), но вообще не понимаю как их можно применить в МК.
На вскидку:
- синглтон - практически вся периферия в МК с вводом-выводом отображенным на память это и есть синглтоны
- обсервер - те самые коллбеки, пользовательский интерфейс и так далее
- шаблонный метод (буквально то, что делают в плюсах шаблоны функций)
- стратегия - вынос алгоритма в отдельную функцию (пример с qsort уже упоминался)
- лок - захват/освобождение ресурсов (сериализация доступа к переменным, блокирование прерываний на время доступу к ресурсу/переменной)
- интерпретатор (скажем, встраиваемые интерпретаторы языков или, например, интерпретатор G-кода)
- реактор (своего рода многозадачность без RTOS, удобно обрабатывать поток разнородных событий)
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 249
04.10.2017, 11:33
ivsy,
если делать что-то по работе с экраном то да, имеет место быть.

у меня вот тут была задача по приходу импульса мерить его сигнал и обрабатывать внешним АЦП. И два дня пришлось убить чтобы понять что прерывание происходят с некоторой задержкой(вернее есть три типа задержек связанных с работой стека). Был удивлен когда на второй или третьей день я нашел эту особенность в RM. В итоге все извраты с кодом вылились в код на 10 строк на регистрах и все работает аппаратно. Вот в этой возможности аппаратно и точно решать сложные и быстрые задачи и есть фишка программирования МК. По моему личному мнению. В принципе dosykus_2 об этом всегда говорит. Если использовать паттерны, си++ и шаблоны , то нужно заранее брать более производительный МК и пожертвовать как минимум временем работы от батареии.

А паттерны я стараюсь использовать в софтверных приложениях где нет необходимости считать такты и +-200n секунд ничего не решают, проблем с питанием нет и процессор может "сжувать" почти любые ошибки и неточности.

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

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

OVY-srok, при заходе в прерывания все регистры уходят в стек. при выходе из прерывания они должны вернуться в свои значения. Чисто мое дилетанское мнение. Хотя возможно начальные регистры просто затерлись вычислениями в цикле, а потом уже ушли в стек.(надо будет почитать про младшие регистры.) короче в любом случае в прерывании регистры будут другими(иметь по умолчанию случайные значения). так я понимаю этот процесс.
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
04.10.2017, 12:09
Цитата Сообщение от Otomys-dm
Если использовать паттерны, си++ и шаблоны , то нужно заранее брать более производительный МК и пожертвовать как минимум временем работы от батареии.
С чего бы вдруг? Нет никаких причин для того, что бы плюсовый код был, как минимум, не хуже С-шного.
Цитата Сообщение от Otomys-dm
А паттерны я стараюсь использовать в софтверных приложениях где нет необходимости считать такты и +-200n секунд ничего не решают, проблем с питанием нет и процессор может "сжувать" почти любые ошибки и неточности.
Опять-таки, паттерны это всего лишь типовые подходы для решения типовых задач. Они не дают оверхеда сами по себе, единственное требование - применять их там, где они к месту, то есть для типовых задач. Собственно, навык применения паттернов в том и состоит, что бы а) распознать типовой кусок и б) выбрать подходящее решение. Другое применение паттернов - алгоритмические "кубики" из которых собираются более сложные решения. Навык применения паттернов позволяет гибко модифицировать подходы и эффективно придумывать новые, под конкретную задачу.
Цитата Сообщение от Otomys-dm
короче для софтверного программиста процедурный подход скорее зло и лучше мыслить классами и паттернами. Для МК крайне трудно представить задачи где это целесообразно и в процедурном подходе я не вижу ничего плохого. Особенно если процедуры построены с учетом особенностей аппаратуры.
На С++ и шаблонах можно писать процедурно, можно писать объектно. Другими словами, это ортогональные вещи. Кроме того, противопоставление процедурного и объектного подхода происходит от банального непонимания того, что объектный подход всего лишь развитие и расширение процедурного. Цель обоих подходов ровно одна: уменьшать сложность за счет уменьшения количества связей между частями программы. А досикус и прочае "илита" просто-напросто против того, что они не в состоянии осмыслить и научиться использовать.

P.S. как верно кто-то заметил в другой теме - железо это всего несколько процентов кода в любой мало-мальски сложной прошивке, остальное - алгоритмы и данные. и тут нет никакой разницы в том, пишется код для "большого" процессора или для МК, просто-напросто выбираются те решения, которые вписываются по требованиям конкретной задачи. любое искусственное отгораживание эмбеддед от остальных областей приводит только к зашориванию и косности. это особенно опасно с учетом того, что ресурсы МК постоянно увеличиваются и возможности растут, а значит расширяется круг решаемых задач и сложность кода. "Большие" компы уже имеют опыт решения задач такого уровня сложности и накопили немало информации, подходов, набитых шишек и тому подобного. Отгораживаться от этого и изобретать велосипед заново - бесполезная потеря времени и сил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.10.2017, 12:09
Помогаю со студенческими работами здесь

Зачем биты нужны это меньше байтов но 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...

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

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


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

Или воспользуйтесь поиском по форуму:
136
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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 с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru