|
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
|
|
| 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 | |||
0
|
|||
|
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
|
||
| 26.09.2017, 18:40 | ||
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 | |||
0
|
|||
|
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
|
||
| 26.09.2017, 21:04 | ||
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 | ||
Для ARM ядра. Параметры в прерывание предавать можно, но не во все и не всегда. Прежде всего прерывание должно иметь самый низкий приоритет, и быть единственным с этим приоритетом. Второе - ждать прерывание не имеет смысла, его нужно вызывать самостоятельно. По сути это аналог запрета прерываний, код вашей функции будет выполняться вне зависимости от внешней очереди в поликлинику. Однако в этом случае все желающие только спросить - смогут зайти после вас, с сохранением очереди и уровня статуса. Главное - короткие прерывания не теряются как в случае запрета. Параметры передаются через регистры, отдаются через стек. Для чипов st это прерывание SVC, идеальное решение для переключения контекста и приоритетного выполнения кода. Насчёт калабков. Уже шестая страница без примеров реального кода. Шесть страниц слепцы щупают слона в темноте, и не могут определится с его формой. Слону в некоторый момент стало приятно.
0
|
||
|
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
|
||
| 04.10.2017, 08:21 | ||
- синглтон - практически вся периферия в МК с вводом-выводом отображенным на память это и есть синглтоны - обсервер - те самые коллбеки, пользовательский интерфейс и так далее - шаблонный метод (буквально то, что делают в плюсах шаблоны функций) - стратегия - вынос алгоритма в отдельную функцию (пример с 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 | ||||
P.S. как верно кто-то заметил в другой теме - железо это всего несколько процентов кода в любой мало-мальски сложной прошивке, остальное - алгоритмы и данные. и тут нет никакой разницы в том, пишется код для "большого" процессора или для МК, просто-напросто выбираются те решения, которые вписываются по требованиям конкретной задачи. любое искусственное отгораживание эмбеддед от остальных областей приводит только к зашориванию и косности. это особенно опасно с учетом того, что ресурсы МК постоянно увеличиваются и возможности растут, а значит расширяется круг решаемых задач и сложность кода. "Большие" компы уже имеют опыт решения задач такого уровня сложности и накопили немало информации, подходов, набитых шишек и тому подобного. Отгораживаться от этого и изобретать велосипед заново - бесполезная потеря времени и сил.
0
|
||||
| 04.10.2017, 12:09 | |
|
Помогаю со студенческими работами здесь
136
Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? Сомнительно работают клавиши Сомнительно сильные просадки ФПС Коллбэки Коллбэки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Конвертировать закладки 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 с альфа-каналом (с прозрачным. . .
|