-
- Не скажи. Если можно один раз, в одном месте описать переменную и не вспоминать больше прямой это бит или инверсный и какой он по счету в регистре, то это правильный дзэн. - Скрипач(22.07.2015 19:46)
- Ну да. И делается это так: в шапке сишника пишем "#define ASSERT_CS() do { PORT &= ~(1 << 3); } while (0)". И не нужны все эти set_hi, set_lo. - SciFi(22.07.2015 20:56)
- Угу. А потом если поменять номер бита то менять магические цифры в нескольких местах: где ставите,где сбрасываете, где проверяете состояние для тоггливания... Вы все почему-то забываете, что у управления битами есть 3 уровня представления: Олдфаг(508 знак., 22.07.2015 23:04, )
- Вся работа с конкретным портом и битом должна быть упихана в один маленький файл. Который содержит функции на уровне "выполнить такое-то действие" относительно некого внешнего устройства (что может затрагивать более одного бита). Принципиально, fk0(270 знак., 23.07.2015 10:57, ссылка)
- Все вы дураки и не лечитесь :-) =AlexD=(774 знак., 23.07.2015 07:05)
- О ерунде спорить изволите, а главного не замечаете. Такие "имена" нельзя использовать в качестве индексов в массивах. А я, например, частенько. Скрипач(732 знак., 23.07.2015 09:39 - 24.07.2015 10:47)
- Для индекса можно operator[] переопределить :-), фигня вопрос, тем более что нужно это редко. - =AlexD=(23.07.2015 09:47)
- А в переменную сохранить? - Скрипач(23.07.2015 09:53)
- Что сохранить? - =AlexD=(23.07.2015 09:55)
- Адрес входа или выхода. Скрипач(850 знак., 23.07.2015 09:58)
- Ничё не понял. Так индекс же он и есть. Более дистиллировано можешь показать что тебе нужно? - =AlexD=(23.07.2015 10:01)
- Как-то так. Скрипач(227 знак., 23.07.2015 10:08)
- Блинн, дошло, тебе тупо нужно передавать маску, ну так и передавай её явно, иначе читатели твоего кода будут тупить так-же как и я =AlexD=(372 знак., 23.07.2015 10:47)
- Я использую номер бита в виртуальном порту. На вход это отфильтрованное, очищенное от дребезга, на выход - просто "отвязанное" от фактических регистров. Скрипач(203 знак., 23.07.2015 11:16 - 11:18)
- Тогда ты пишешь не по теме, изначальная тема была именно про аппаратные порты, а виртуализировать устройство можно 100500 разными способами, и это уже другой слой абстракции. - =AlexD=(23.07.2015 11:19)
- Если это другой слой абстракции, то что абстрагирует этот? - Скрипач(23.07.2015 11:21 - 11:26)
- "Абстрагируй это!" Млин, уже ногой дёрнуть не могут без псевдофилософических дискуссий об "абстракциях". Страшно подумать, сколько уровней абстракции наслоится, если придётся ещё и мигать лампочкой :-))) - SciFi(23.07.2015 11:59)
- Вот и я о том же. Регистры UART это явно не то, что нужно абстрагировать. - Скрипач(23.07.2015 12:03)
- Почему это нельзя проабстрагировать регистры UART ? что такого уникального они делают? десяток макросов! VL(492 знак., 23.07.2015 14:54, )
- Можно абстрагировать арифметические операторы! SciFi(83 знак., 23.07.2015 15:31)
- не, ну я серьезно. Есть протокол, который поддерживается на 6 семействах контроллеров, напрашивается абстрагировать низкий уровень работы с портами, что и было сделано. - VL(23.07.2015 15:34, )
- Можно абстрагировать арифметические операторы! SciFi(83 знак., 23.07.2015 15:31)
- А если это внешний UART на параллельной шине? ;-) - =AlexD=(23.07.2015 12:27)
- ...подключенный в облаке через GSM-модем? :) - Скрипач(23.07.2015 12:33)
- Почему это нельзя проабстрагировать регистры UART ? что такого уникального они делают? десяток макросов! VL(492 знак., 23.07.2015 14:54, )
- Вот и я о том же. Регистры UART это явно не то, что нужно абстрагировать. - Скрипач(23.07.2015 12:03)
- А можно не менять смысл сообщения? ИМХО ответ очевиден и вытекает из корневого топика - абстрагирует физические адреса конкретных периферийных устройств. Физических устройств, а не виртуальных. Вся абстракция этого уровня влезает в один хедер и =AlexD=(18 знак., 23.07.2015 11:32)
- Вот в виде трёхуровневых вложенных макросов - вреден и бесполезен, а простейшие инлайновые функции заметно улучшают восприятие кода, не внося никакой неразберихи или накладных расходов. И упрощают портирование на другую плату. =AlexD=(48 знак., 23.07.2015 11:28)
- С этим не спорю. - Скрипач(23.07.2015 11:29 - 11:31)
- "Абстрагируй это!" Млин, уже ногой дёрнуть не могут без псевдофилософических дискуссий об "абстракциях". Страшно подумать, сколько уровней абстракции наслоится, если придётся ещё и мигать лампочкой :-))) - SciFi(23.07.2015 11:59)
- Если это другой слой абстракции, то что абстрагирует этот? - Скрипач(23.07.2015 11:21 - 11:26)
- Тогда ты пишешь не по теме, изначальная тема была именно про аппаратные порты, а виртуализировать устройство можно 100500 разными способами, и это уже другой слой абстракции. - =AlexD=(23.07.2015 11:19)
- Идея с маской вообще не умная, т.к. тот кто будет разводить печатную плату может перекинуть биты между разными портами. Если это не параллельная шина конечно. - fk0(23.07.2015 10:59)
- Ну разумеется, тут же нет printf , значит априори неумное решение. Пыонер, иди вжопу. - =AlexD=(23.07.2015 11:06)
- Одни абстракции заменяются на другие, которые тоже нужно учить, документировать и запоминать, учитывать возможные побочные эффекты. Всё превращается в bloatware. Не нужно плодить лишних сущностей, сверх необходимого. Должен быть один слой HAL и в fk0(475 знак., 23.07.2015 10:52, ссылка)
- Я использую номер бита в виртуальном порту. На вход это отфильтрованное, очищенное от дребезга, на выход - просто "отвязанное" от фактических регистров. Скрипач(203 знак., 23.07.2015 11:16 - 11:18)
- Блинн, дошло, тебе тупо нужно передавать маску, ну так и передавай её явно, иначе читатели твоего кода будут тупить так-же как и я =AlexD=(372 знак., 23.07.2015 10:47)
- Как-то так. Скрипач(227 знак., 23.07.2015 10:08)
- Ничё не понял. Так индекс же он и есть. Более дистиллировано можешь показать что тебе нужно? - =AlexD=(23.07.2015 10:01)
- Адрес входа или выхода. Скрипач(850 знак., 23.07.2015 09:58)
- Что сохранить? - =AlexD=(23.07.2015 09:55)
- Незнаю. Я вчера бегло пробежался по "библиотеке" прикладных алгоритмов - в двух третях используется. - Скрипач(23.07.2015 09:53)
- А в переменную сохранить? - Скрипач(23.07.2015 09:53)
- Для индекса можно operator[] переопределить :-), фигня вопрос, тем более что нужно это редко. - =AlexD=(23.07.2015 09:47)
- Неплохо... а теперь без "++", на Си? ;) - Dingo(23.07.2015 07:45)
- А такие компиляторы ещё остались? Которые плюсов не понимают? - =AlexD=(23.07.2015 08:09)
- Пики наше всё, основа основ. (C) - fk0(23.07.2015 11:00, ссылка)
- Я знал! - =AlexD=(23.07.2015 11:07)
- Пики наше всё, основа основ. (C) - fk0(23.07.2015 11:00, ссылка)
- Неплохо? Неплохо для одного бита писать [имя порта] < < [позиция] три раза для PORT, затем три раза он напишет это для DDR, и ещё пару раз для PIN?? А если менять придется - сколько поводов для субъективных ошибок? - Олдфаг(23.07.2015 07:54, )
- Для этого в редакторе есть "поиск и замена"... - fk0(23.07.2015 11:00)
- Ога. PORTA заменить на PORTC "заменить все"))) В одном месте должно меняться. - Олдфаг(23.07.2015 14:36, )
- Ты не в состоянии охватить глазами четыре строчки кода? Ну хер с тобой, персонально для тебя можешь добавить константу =AlexD=(330 знак., 23.07.2015 08:02)
- Ещё немного...)). Номер бита сделали, да, уже лучше, теперь надо избавиться от жесткой привязки PORTA/DDRA/PINA. Букву порта для данного пина надо изловчиться написать единожды. Тогда это будет песня. А матросами или средствами ++ это уже как кому Олдфаг(29 знак., 23.07.2015 08:12, )
- А какие проблемы? Bill(308 знак., 24.07.2015 08:05)
- Бред какой-то. Объясни, если не трудно, на таком примере. Скрипач(294 знак., 24.07.2015 09:43 - 10:14)
- Тоже все просто. Bill(720 знак., 24.07.2015 10:35 - 10:41)
- Судя по комментарием, это попадает в исходники? Тогда не завидую программистам, пытающимся изменить полярность включения светодиодов, ведь по проекту перлы типа |= &= разбросаны по 88-ми разным местам. Не судья, имхо не тот подход. Наверх из Олдфаг(79 знак., 24.07.2015 17:36, )
- Ну, когда таких выражений становится много, я использую соответствующие inline функции. - Bill(24.07.2015 18:15)
- Извините, что встреваю. maik-vs(1279 знак., 24.07.2015 11:00)
- Комментарии в коде доставляют. "c = a + b; // variable c now holds the sum of a and b" :-))) SciFi(55 знак., 24.07.2015 10:50)
- Если не трудно, исправьте комментарии на правильные. - Bill(24.07.2015 11:10)
- Их не надо исправлять, их надо удалить. Там и так понятно, что написано. - SciFi(24.07.2015 11:12)
- Маленький вопрос: что именно делается в данном операторе? Bill(35 знак., 24.07.2015 11:21)
- Окей, в этой строчке комментарий оставить разрешаю. Но в остальных - ни-ни :-) - SciFi(24.07.2015 11:33)
- Вот я и предлагаю выкинуть все комментарии, которые вы считаете лишними. - Bill(24.07.2015 12:20)
- Окей, в этой строчке комментарий оставить разрешаю. Но в остальных - ни-ни :-) - SciFi(24.07.2015 11:33)
- Маленький вопрос: что именно делается в данном операторе? Bill(35 знак., 24.07.2015 11:21)
- Их не надо исправлять, их надо удалить. Там и так понятно, что написано. - SciFi(24.07.2015 11:12)
- Если не трудно, исправьте комментарии на правильные. - Bill(24.07.2015 11:10)
- Это пятничный троллинг? Ну-ну. - Скрипач(24.07.2015 10:43)
- Это можно рассматривать как угодно. Но именно так я описываю порты на практике, в независимости от дня недели. - Bill(24.07.2015 10:47 - 10:50)
- Я делаю так (->) И первое о чем я перестаю думать - о том, что биты расположены в каких-то регистрах. Скрипач(187 знак., 24.07.2015 10:52, ссылка)
- Ну, так, опять же, у вас все равно имеется привязка к конкретным портам. Bill(255 знак., 24.07.2015 11:03)
- Вы не поняли :) Скрипач(788 знак., 24.07.2015 11:26 - 19:54)
- Ну, так, опять же, у вас все равно имеется привязка к конкретным портам. Bill(255 знак., 24.07.2015 11:03)
- Я делаю так (->) И первое о чем я перестаю думать - о том, что биты расположены в каких-то регистрах. Скрипач(187 знак., 24.07.2015 10:52, ссылка)
- Это можно рассматривать как угодно. Но именно так я описываю порты на практике, в независимости от дня недели. - Bill(24.07.2015 10:47 - 10:50)
- Судя по комментарием, это попадает в исходники? Тогда не завидую программистам, пытающимся изменить полярность включения светодиодов, ведь по проекту перлы типа |= &= разбросаны по 88-ми разным местам. Не судья, имхо не тот подход. Наверх из Олдфаг(79 знак., 24.07.2015 17:36, )
- Тоже все просто. Bill(720 знак., 24.07.2015 10:35 - 10:41)
- Бред какой-то. Объясни, если не трудно, на таком примере. Скрипач(294 знак., 24.07.2015 09:43 - 10:14)
- Угу, т.е. пройти до полного маразма всё дорогу до самого конца. Этабезменя. - =AlexD=(23.07.2015 08:16)
- А до счастья оставался один дифайн... Что ж, как каждому своё. - Олдфаг(23.07.2015 08:26, )
- А какие проблемы? Bill(308 знак., 24.07.2015 08:05)
- Ещё немного...)). Номер бита сделали, да, уже лучше, теперь надо избавиться от жесткой привязки PORTA/DDRA/PINA. Букву порта для данного пина надо изловчиться написать единожды. Тогда это будет песня. А матросами или средствами ++ это уже как кому Олдфаг(29 знак., 23.07.2015 08:12, )
- Для этого в редакторе есть "поиск и замена"... - fk0(23.07.2015 11:00)
- А такие компиляторы ещё остались? Которые плюсов не понимают? - =AlexD=(23.07.2015 08:09)
- "Все тот же сон!" (с) Опять эта куча магических цЫфр сдвига! Да когда ж поймёте, что позицию бмтта надо описАть единожды, и далее обращаться к биту по логическому имени. - Олдфаг(23.07.2015 07:36, )
- Кому это ну><уй надо? Здесь всё в одном месте всё понятно, и при отладке не нужно лезть в хедеры, что-бы узнать что это за магическое имя тут написано, отладчик шагает по таким функциям и всё ясно и понятно. =AlexD=(51 знак., 23.07.2015 07:54)
- Чтобы 10 раз не писать, к какому порту и на какой позиции находится пресловутый бит. А имя - оно логическое, оно понятное. - Олдфаг(23.07.2015 07:57, )
- Любую идею можно довести до маразма. - =AlexD=(23.07.2015 08:06)
- Скажите это неудовлетворенной актом женщине)) - Олдфаг(25.07.2015 10:04, )
- Любую идею можно довести до маразма. - =AlexD=(23.07.2015 08:06)
- Чтобы 10 раз не писать, к какому порту и на какой позиции находится пресловутый бит. А имя - оно логическое, оно понятное. - Олдфаг(23.07.2015 07:57, )
- Кому это ну><уй надо? Здесь всё в одном месте всё понятно, и при отладке не нужно лезть в хедеры, что-бы узнать что это за магическое имя тут написано, отладчик шагает по таким функциям и всё ясно и понятно. =AlexD=(51 знак., 23.07.2015 07:54)
- О ерунде спорить изволите, а главного не замечаете. Такие "имена" нельзя использовать в качестве индексов в массивах. А я, например, частенько. Скрипач(732 знак., 23.07.2015 09:39 - 24.07.2015 10:47)
- +1. Так правильнее. Но технологический прием - передача нескольких параметров в макрос под одним именем - вполне себе представляет академический интерес. - Скрипач(22.07.2015 21:02)
- Угу. А потом если поменять номер бита то менять магические цифры в нескольких местах: где ставите,где сбрасываете, где проверяете состояние для тоггливания... Вы все почему-то забываете, что у управления битами есть 3 уровня представления: Олдфаг(508 знак., 22.07.2015 23:04, )
- Ну да. И делается это так: в шапке сишника пишем "#define ASSERT_CS() do { PORT &= ~(1 << 3); } while (0)". И не нужны все эти set_hi, set_lo. - SciFi(22.07.2015 20:56)
- Не скажи. Если можно один раз, в одном месте описать переменную и не вспоминать больше прямой это бит или инверсный и какой он по счету в регистре, то это правильный дзэн. - Скрипач(22.07.2015 19:46)