Показать сообщение отдельно
Старый 20.10.2009, 11:20   #45
Pitty
Местный
 
Регистрация: 26.04.2006
Адрес: Удомля, гдежещё
Сообщений: 1,986
Вы сказали Спасибо: 676
Поблагодарили 257 раз(а) в 167 сообщениях
По умолчанию

Цитата:
Сообщение от Messiah Посмотреть сообщение
Я не претендовал на истину в первой инстанции,
Аналогично квоту. Но хотел бы свои пять копеек. Я согласен с Мессиа, что без хорошего живого учителя-гуру очень тяжело, ответы на некоторые элементарные вопросы приходится искать по различным форумам, факам, даташитам и т.д. Дело в том, что профессиональные программисты (тех, которых я знаю) постоянно следят за периодикой, и проскальзывающие там "золотые мысли" обязательно копипастят или хранят в голове (есть такие, у которых память потрясающая).
Например, столкнулся недавно с такой проблемой (расскажу, раз уж тема про программирование): мне потребовалось на ноге TxD порта RS232 держать постоянно неактивный уровень, т.е. +12 В. Делал я это в С# и спользование стандартного компонента (неплохо работает, кстати). Первая мысль была (я почему-то так и думал, что все так делают): посылать постоянно посылку их 0x00, но вот одна незадача: посылка всегда заканчивается стоп-битом (лог. 1 =-12 V, в результате получается не 12В, а 9.8В), а поставить 0 стоповых бит почему-то нельзя. Долго гуглил, лазил по всяким форумам, долго пасся на CodeProject, нигде ответа не нашёл. Уже в четвёртом часу ночи решил поискать исходники программатора, к моему величайшему удивлению, нашёл сорцы под линукс одного из программаторов, долго ковырялся по нему и наконец нашёл это простейшее решение (меня долго удивляло, что он делает это действо всего одной строчкой, никак не мог понять почему). Выяснилось, из-за моего неточного понимания работы порта RS-232 я и не смог найти решение. Дело в том, что режим IDLE в RS-232 - это высокий активный уровень, т.е. -12 В, но есть такой режим - BREAK, это когда на шине устанавливается низкий активный уровень больше чем на один фрейм, т.е. - имеется возможность напрямую управлять пином TxD. Потребовалось всего 1 строчка:
Код:
COM.Break = true;
и всё. Вот так вот один вопрос знающему человеку смог бы сэкономить мне около 8 часов жизни. В)

ЗЫ. забыл сказать, первая реазилация этой задачи занимала порядка 30 строк с выделением дополнителного буффера и созданием отдельного потока, который постоянно пихает 0x00 в порт. В) А ведь есть программы, разработчики которых не стали заморачиваться и остановились на подобном решении, а мы потом спрашиваем, почему это компьютерные программы тормозят всё больше и больше.
__________________
I never saw a wildthing sorring for itself.
A small bird will drop frozen dead without ever felt sorry for itself.

Последний раз редактировалось Pitty; 20.10.2009 в 11:26.
Pitty вне форума