-
- у меня расширители PCF8574/A и PCA9534/A с жесткой адресацией на
шине. естественно стоит автодедект. но в зависимости от варианта
аппаратной сборки подключается разный набор светодиодов (да и
некоторых ключиков питания). причем сами эти расширители имеют
внутри разную физически конфигурацию выводов - в PCF8574/A
неотключаемая подтяжка, а в PCA9534/A включаемая. для управления
ключиками это важно. светодиоды всегда можно погасить и тут же
зажечь как нужно (вспомная анекдот о Vit(114 знак., 23.06.2024 10:16)
- Сам бог велел спрятать всё это непотребство в класс расширителя и
выдать светодиоду интерфейс пина к которому он подключен. - VladislavS.(23.06.2024 10:26)
- Это впорос реализации, но не применения. У меня приложение вызывает
функцию управления функциональным узлом - светодиод обмена данными
включить. Под капотом оно и проверит, а инициализирован ли драйвер,
если нет, то запустит инициализацию, и другие проверки, ну или
просто дёрнет GPIO. Класс там у драйвера или модуль (как
идентифицированная единица компиляции) с набором функций - это не
суть важно. - Vit(23.06.2024 10:57)
- Всегда есть особенности реалищации, но не надо делать из этого
винегрет. Светодиод не должен заниматься проверкой инициализации
порта. Это дело самого порта. Если у вас такой хитрый порт, то и
наворачивайте его логику. Оставьте светодиоду светодидово. Так код
будет проше и понятней. - VladislavS.(23.06.2024 11:14)
- При чём тут винегрет? Да, есть драйвер I2C_GPIO, он сам себя
инициализирует, если до того не вызывали. Да, оно под капотом и
кишки наружу не торчат. Но функция включения светодиода в
приложении вызывает ручками вписанную (назначенную) функцию от
этого драйвера или от CPU_GPIO (драйвер, как ни странно, тоже
бывает нужен). И она действительно чихать хотела как оно
реализовано. В CPU_GPIO может быть bit banding, работа с Set/Reset
регистрами, может быть чтение-модификация запись Vit(890 знак., 23.06.2024 12:44)
- Вы всё красиво и правильно расписываете. Я лишь за то чтобы код
gsm-модуля ничего об этом не знал. - VladislavS.(23.06.2024 13:10)
- :) я ж вроде как за то же. - Vit(23.06.2024 17:13)
- Вы всё красиво и правильно расписываете. Я лишь за то чтобы код
gsm-модуля ничего об этом не знал. - VladislavS.(23.06.2024 13:10)
- Бугага! (только пожалуйста не обижайтесь, это не переход на
личности) А как насчет необходимости по-быстренькому подменить пару
входов заглушками, потому что в целевом bsp нет свободных? 8) Тоже
броситесь прикладной алгоритм переписывать? У вас это дешевле? :) Cкpипaчпророк(176 знак., 23.06.2024 11:25 - 11:38)
- Когда вы принимаете решение использовать чужую библиотеку на
развитие которой не можете влиять, то приниманте на себя все риски.
Какая разница как она написана? Даже если вляпались в какашку,
кто-то держит пистолет у виска с требованием обновить её? - VladislavS.(23.06.2024 12:26)
- Мы живем не в стране розовых пони, вы забыли? :) - Cкpипaчпророк(23.06.2024 12:29)
- В голове должно что-то срабатывать задолго до момента когда вы
решаетесь править чужие библиотеки. - VladislavS.(23.06.2024 12:42)
- Вы меня с кем-то перепутали. - Cкpипaчпророк(23.06.2024 12:45)
- Не я предлагал gsm-библиотеку править. - VladislavS.(23.06.2024 12:51)
- И не я. Cкpипaчпророк(86 знак., 23.06.2024 12:53)
- Значит показалось. А как вы вообще библиотеки делаете, если там
постоянно в функциях что-то переписывать приходится? Это то мне
хоть не показалось? - VladislavS.(23.06.2024 12:54)
- Нужно не путать библиотеки и модули. Есть собственно программа,
состоящая из дерева модулей и есть используемые библиотеки. Если
заказчику понадобилась хоть немного иная программа - дерево модулей
копируется в отдельный, новый проект. А библиотеки - нет. Cкpипaчпророк(644 знак., 23.06.2024 13:29)
- Можно поподробней о разнице между библиотекой и модулем? И то и
другое переиспользуется в разных проектах, в чём разница то? - VladislavS.(23.06.2024 14:00)
- Django это библиотека, а алгоритм регулирования давления двумя
насосами на одном частотнике - модуль :) Cкpипaчпророк(529 знак., 23.06.2024 14:15 - 14:34)
- Библиотека это цивилизованное переиспользование кода, а модуль
тупая копипаста из проекта в проект? Чёт сомнительно. - VladislavS.(23.06.2024 14:23)
- Несовсем копипаста, CVS-репозитарий никто не отменял, но в принципе - да. Самый короткий путь - прямой. - Cкpипaчпророк(23.06.2024 14:29)
- Библиотека это цивилизованное переиспользование кода, а модуль
тупая копипаста из проекта в проект? Чёт сомнительно. - VladislavS.(23.06.2024 14:23)
- Django это библиотека, а алгоритм регулирования давления двумя
насосами на одном частотнике - модуль :) Cкpипaчпророк(529 знак., 23.06.2024 14:15 - 14:34)
- Можно поподробней о разнице между библиотекой и модулем? И то и
другое переиспользуется в разных проектах, в чём разница то? - VladislavS.(23.06.2024 14:00)
- Нужно не путать библиотеки и модули. Есть собственно программа,
состоящая из дерева модулей и есть используемые библиотеки. Если
заказчику понадобилась хоть немного иная программа - дерево модулей
копируется в отдельный, новый проект. А библиотеки - нет. Cкpипaчпророк(644 знак., 23.06.2024 13:29)
- Значит показалось. А как вы вообще библиотеки делаете, если там
постоянно в функциях что-то переписывать приходится? Это то мне
хоть не показалось? - VladislavS.(23.06.2024 12:54)
- И не я. Cкpипaчпророк(86 знак., 23.06.2024 12:53)
- Не я предлагал gsm-библиотеку править. - VladislavS.(23.06.2024 12:51)
- Вы меня с кем-то перепутали. - Cкpипaчпророк(23.06.2024 12:45)
- В голове должно что-то срабатывать задолго до момента когда вы
решаетесь править чужие библиотеки. - VladislavS.(23.06.2024 12:42)
- Мы живем не в стране розовых пони, вы забыли? :) - Cкpипaчпророк(23.06.2024 12:29)
- Я не знаю что такое "в bsp нет свободных". У заглушки в любом
случае должен быть штатный интерфейс и вы его напишете. Какая
разница в модуле или классе? У меня, например, есть готовый
порт-пустышка. Светик будет думать что всё работает, а реально он
никуда не подключен. - VladislavS.(23.06.2024 11:40)
- Разница огромная. Если у вас есть функция, где происходит переход
от прикладного уровня к аппаратно-зависимому, то можно нужные две
строчки поставить там. Без (1) введения новых классов и
прочесывания прикладного кода, на предмет где подправить
инициализацию, и без (2) засорения библиотек, ради частных случаев
применения. - Cкpипaчпророк(23.06.2024 11:41)
- Это потому что у вас спагетти-код и неправильное разделение на
абстракции. - VladislavS.(23.06.2024 12:03)
- Вам виднее :) *Именно на этом мы и зарабатываем деньги. - Cкpипaчпророк(23.06.2024 12:14 - 12:55)
- . - VladislavS.(26.06.2024 23:06)
- Вам виднее :) *Именно на этом мы и зарабатываем деньги. - Cкpипaчпророк(23.06.2024 12:14 - 12:55)
- Это потому что у вас спагетти-код и неправильное разделение на
абстракции. - VladislavS.(23.06.2024 12:03)
- Разница огромная. Если у вас есть функция, где происходит переход
от прикладного уровня к аппаратно-зависимому, то можно нужные две
строчки поставить там. Без (1) введения новых классов и
прочесывания прикладного кода, на предмет где подправить
инициализацию, и без (2) засорения библиотек, ради частных случаев
применения. - Cкpипaчпророк(23.06.2024 11:41)
- Когда вы принимаете решение использовать чужую библиотеку на
развитие которой не можете влиять, то приниманте на себя все риски.
Какая разница как она написана? Даже если вляпались в какашку,
кто-то держит пистолет у виска с требованием обновить её? - VladislavS.(23.06.2024 12:26)
- При чём тут винегрет? Да, есть драйвер I2C_GPIO, он сам себя
инициализирует, если до того не вызывали. Да, оно под капотом и
кишки наружу не торчат. Но функция включения светодиода в
приложении вызывает ручками вписанную (назначенную) функцию от
этого драйвера или от CPU_GPIO (драйвер, как ни странно, тоже
бывает нужен). И она действительно чихать хотела как оно
реализовано. В CPU_GPIO может быть bit banding, работа с Set/Reset
регистрами, может быть чтение-модификация запись Vit(890 знак., 23.06.2024 12:44)
- Всегда есть особенности реалищации, но не надо делать из этого
винегрет. Светодиод не должен заниматься проверкой инициализации
порта. Это дело самого порта. Если у вас такой хитрый порт, то и
наворачивайте его логику. Оставьте светодиоду светодидово. Так код
будет проше и понятней. - VladislavS.(23.06.2024 11:14)
- Это впорос реализации, но не применения. У меня приложение вызывает
функцию управления функциональным узлом - светодиод обмена данными
включить. Под капотом оно и проверит, а инициализирован ли драйвер,
если нет, то запустит инициализацию, и другие проверки, ну или
просто дёрнет GPIO. Класс там у драйвера или модуль (как
идентифицированная единица компиляции) с набором функций - это не
суть важно. - Vit(23.06.2024 10:57)
- Сам бог велел спрятать всё это непотребство в класс расширителя и
выдать светодиоду интерфейс пина к которому он подключен. - VladislavS.(23.06.2024 10:26)
- у меня расширители PCF8574/A и PCA9534/A с жесткой адресацией на
шине. естественно стоит автодедект. но в зависимости от варианта
аппаратной сборки подключается разный набор светодиодов (да и
некоторых ключиков питания). причем сами эти расширители имеют
внутри разную физически конфигурацию выводов - в PCF8574/A
неотключаемая подтяжка, а в PCA9534/A включаемая. для управления
ключиками это важно. светодиоды всегда можно погасить и тут же
зажечь как нужно (вспомная анекдот о Vit(114 знак., 23.06.2024 10:16)