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

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

18.09.2017, 21:57. Показов 13521. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru