... но не любой ценой.
- 
	- Пофиг. Если чел не может в трёх соснахоператорах разобраться, то нужно отобрать у него клавиатуру и вручить напильник. Ибо нефуй. - SciFi(22.07.2015 19:42)- Не скажи. Если можно один раз, в одном месте описать переменную и не вспоминать больше прямой это бит или инверсный и какой он по счету в регистре, то это правильный дзэн. - Скрипач(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,  ) )
 
- не, ну я серьезно. Есть протокол, который поддерживается на 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,  ) )
 
- Ога. 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,  ) )
 
- А до счастья оставался один дифайн... Что ж, как каждому своё. - Олдфаг(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,  ) )
 
- Скажите это неудовлетворенной актом женщине)) - Олдфаг(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)
					
 
- Пофиг. Если чел не может в трёх