Как-то однажды под Windows NT, на разделе NTFS, мой приятель создал файл с именем com1. После этого он забыл, как создал этот файл.
Что мы только с ним потом ни пробовали, чтобы его удалить! Ни explorer, ни команда del, ни Volkov Commander, ни FAR - никто не мог и не хотел удалять этот файл. Программы исправления дисков ChkDsk и Нортон Диск Доктор не обнаруживали никаких проблем и поэтому ничего не исправляли. Мы попытались с помощью DiskEdit найти в структурах файловой системы имя этого файла, чтобы "вручную" его переименовать, но тоже обломались - ничего не нашли. Мы ведь тогда не знали, что имена файлов в NTFS хранятся в двухбайтной кодировке Unicode - и искали в однобайтной ASCII. Приятель тогда даже предположил (слухи ходили), что имена файлов в каталогах NTFS хранятся в виде двоичного дерева - чтобы ускорять поиск. Поэтому в "голом виде" их на диске, дескать, и не найдешь.
Плохо было дело. Но однажды все-таки я нашел способ удалить этот файл. Можете ли вы себе представить, какое это было облегчение! :)
Некоторые скажут, что я в "диспетчере устройств" переназначил номер последовательному порту, освободив имя COM1. Нет, неправильно. Во-первых, в Windows NT еще не было "диспетчера устройств", в котором можно было бы переназначить имя последовательного порта. Во-вторых, описываемый способ работает с любыми "запрещенными" именами файлов, даже такими, которые принципиально нельзя переназначить, вроде "nul", "aux", "prn".
Итак, внимание, ответ :)
Чтобы создать, переименовать или удалить файл с запрещенным именем, нужно указать его полное имя с префиксом:
\\.\C:\Myfolder\COM1
Попробуйте - будет весело! Можно даже пошутить с другом - создать ему такой файл где-нибудь в глубоком подкаталоге, который он вскоре намеревается удалить :)
Что любопытно - новые версии FAR Manager удаляют такие файлы без лишних вопросов. Молодцы разработчики - предусмотрели!
Параллельный порт (LPT) под Windows NT/2000/XP27-01-2008 04:56
Параллельный порт на PC до сих пор имеет некоторую привлекательность для разработчика. По сравнению с последовательным портом (RS232), параллельный порт может обеспечить более высокую скорость передачи данных. LPT-порт имеет уровни сигналов ТТЛ, поэтому для сопряжения его с простыми устройствами не требуется дополнительных согласователей. По сравнению с USB и RS232 на LPT-порту можно добиться более быстрой реакции выходного сигнала на команды управляющей программы. В отличие от специализированных PCI-карточек ввода-вывода, параллельный порт является широко распространенным, имеется почти в каждом компьютере, дешев и не зависит от монополиста-производителя.
Именно поэтому я через этот порт осуществляю вывод ТТЛ-сигнала, управляющего внешним устройством, от одной моей программы. И выбор оказался очень удачным. Чтобы создать новую систему на базе этой программы, не требуется заказывать экзотические PCI- или USB-карточки ввода-вывода. Почти нет ограничений на тип персонального компьютера - лишь бы в нем был параллельный порт.
Многие, вероятно слышали об усовершенствованиях параллельного порта по сравнению с тем, каким он был на заре эры PC. (речь идет о EPP/ECP). Порт стал истинно двунаправленным, повысилась пропускная способность и даже появился режим DMA - для скоростной передачи данных под управлением многозадачной ОС.
Да только все эти усовершенствования, почему-то, оказались похоронены заживо фирмой Microsoft. Почитайте Microsoft Windows SDK. Сколько там всего написано про API для работы с последовательным портом (RS232). Насколько все развито и доступно для рядового программиста. Не надо писать никакие драйверы - все доступно из пользовательских приложений.
Для параллельного порта ничего этого нет. Чтобы работать с ним из-под Windows NT/2000/XP, обычно люди пишут специализированные драйверы для своих устройств, либо используют программные пакеты, предоставляющие прямой доступ к портам ввода-вывода, такие как SHA. Оба эти варианта некрасивые: в первом случае требуется особо высокая квалификация программиста, чтобы написать драйвер. Во втором случае пользовательское приложение становится опасным: в случае сбоя оно может легко привести к краху операционной системы (синий экран).
На самом деле в Windows NT/2000/XP есть красивый способ доступа к параллельному порту из приложений, наподобие API для работы с COM-портами. Только он не документирован в SDK. Наткнулся я на него случайно, изучая DDK (Driver development kit).
Собрав вместе сведения из документации DDK, изучая исходники драйверов параллельного порта для NT/2000/XP (parport.sys & parallel.sys), а также заголовочных файлов DDK (ntddpar.h), я получил информацию, необходимую для доступа к параллельному порту из пользовательских приложений.
Работа происходит по типичному для винды сценарию. Сначала открывается устройство через CreateFile. Потом настраивается режим обмена путем серии вызовов DeviceIoControl. И начинается обмен данными через ReadFile / WriteFile.
Коды, которые необходимо передавать в DeviceIoControl, а также структуры данных, которые надо подавать в качестве параметров - все это описано в документации DDK и файле ntddpar.h. Этот файл необходимо вытащить из DDK и включить в состав своего приложения.
Виндошные драйверы параллельного порта довольно сложные. Они реализуют все тонкости протоколов Centronics / Nibble / EPP / ECP. Но для простого устройства - допустим если это просто светодиод, управляемый от одной из линий данных - все это излишне и даже нежелательно. А режима "прямого управления сигналами" в виндошных драйверах нет. Тем не менее, я нашел простой способ настроить драйвер на управление светодиодами. Для этого нужно подключить входной сигнал BUSY на землю и настроить порт на режим Centronics. При этом порт можно использовать как 8 выходных цифровых линий и управлять ими из программы с помощью WriteFile.
К сожалению, без внешних микросхем нельзя использовать таким образом параллельный порт для ввода информации. Если на любой из сигналов (BUSY,ACK,ERROR,PAPER_OUT,SELECT) подать не тот уровень, то драйвер не сможет производить в порт вывод.
Упрощенный сценарий Centronics, таким образом, выглядит так:
Поздравляю всех читателей с Новым годом - обычным и старым.
Надеюсь, год подарит вам успехи, радости, здоровье и счастье.
Вчера поздно вечером читал смешную историю из новостей и хохотал до слез, представляя себе происходившее:
"Необычный угонщик троллейбусов объявился в Минске. 23-летний местный житель угнал оставленный на ночь троллейбус "ЗИУ-9" и до утра ездил на нем по городу, подвозя пассажиров. Об этом сообщает белорусское издание "Телеграф".
У троллейбуса была открыта дверь, чем и воспользовался молодой человек. Поездив некоторое время по городу, он "зашел домой перекусить" и затем снова продолжил кататься по Минску, подвозя пассажиров. Вскоре сотрудники депо с помощью сотрудников местной милиции обнаружили угонщика и смогли заблокировать троллейбус, перекрыв ему дорогу аварийной машиной.
В настоящее время угонщик задержан и против него возбуждено уголовное дело. Кроме того, молодому человеку назначили психиатрическую экспертизу, поскольку поведение угонщика показалась сотрудникам милиции крайне странным. Похититель объяснил свой поступок тем, что просто "не может жить без троллейбусов" и увлекался ими с самого детства."
---
Да-с... Представляю себе эту картину. Ночной сумасшедший троллейбус, веселые пассажиры, погоня с милицией... :) И бедное троллейбусное депо с милицией, которые не смогли отключить ему электричество.
Я когда-то представлял себе "пиратский троллейбус" - автомобиль, оборудованный дополнительно электродвигателем и штангами, которые могут присоединяться к троллейбусной сети. Чтобы экономить бензин за казенный счет :)
Кто-нибудь обращал внимание на то, что трогаясь, некоторые троллейбусы и трамваи издают мелодичный тон? Это действует тиристорно-импульсная, современная, экономичная система управления электродвигателем. Старые троллейбусы и трамваи использовали реостатно-контакторную систему, которая значительную часть электроэнергии превращала в тепло. Такие троллейбусы, как правило, стоя на остановке, довольно сильно гудят. Это работает вентилятор, охлаждающий пускотормозные резисторы.
Привет всем постоянным и не очень читателям. Хочу вам сообщить, что я на месте, никуда не пропал. Времени просто было очень мало в последние недели делать записи и участвовать в общественной жизни, так сказать.
В жизни в целом все в порядке. Настроение хорошее, наслаждаюсь настоящим и надеюсь на лучшее в будущем.
Блин, гадская реклама, постоянно мигает, трудно не обращать на нее внимание.
Слушал хорошую песню... С нею целая детективная история. Неизвестно вообще, кто ее поет и откуда она. Мне ее записали когда-то в студии звукозаписи в качестве "дописки" на кассету. Может кто-нибудь из вас эту песню опознает - привожу слова:
Уж ночь на исходе, но где же рассвет?
Его не видать на востоке.
От темного неба, где нет даже звезд,
Затмение солнца исходит.
И небо, дающее всем только шанс,
Своей красотою не блещет.
И мне непонятно, зачем же сейчас
На небо философ клевещет...
Мне выдернуть хочется с корнем себя
Из этой запущенной почвы.
А выдернув, хочется долго бежать
Под куполом праздничной ночи...
Вот так, убегая, ты вспомнишь о тех,
Кого никогда не догонишь,
Кого не найдешь золотые следы,
С кого ничего не возьмешь...
И вновь они видят, что видеть нельзя -
Отчетливо черным на белом.
Им желтой повязкой накрыли глаза,
Их взгляд отделяли от тела.
Их кровь на растоптанном битом стекле,
Их солнце окутано тьмой,
Их пальцы изрезаны ржавым ножом,
А средце обнято петлей...
Удивительно, но игра в шахматы вызывает те же чувства, которые возникают в жизни при реальном противостоянии и конфликте интересов с другими людьми. А также вскрывает образ действия игроков в разных жизненных ситуациях: преимущества, недостатка, проигрыша, выигрыша...
Вероятно, похожим образом влияют на чувства и современные стратегические компьютерные игры, но точно сказать не могу - не играл с людьми, только с компьютером.
Все больше убеждаюсь, что шахматы помогают тренировать стойкость духа, выдержку и волю к победе. Эти качества в противостоянии едва ли не важнее, чем "материальное преимущество" в силах и средствах.
Ну что ж, вот и закончилась эйфория последних дней!
Я не заметил тому конкретных причин - просто, наверно, интуиция, работающая в фоновом режиме, наконец-то выдала "на гора" результат.
Ну а перегиб в одну сторону впоследствии обычно сопровождается перегибом в другую, так что немножко придется половить душевные "отходняки".
Логически понимаю, что не было особо веских причин ни радоваться тогда, ни хандрить сейчас. Но чувства - дело неуправляемое. Хотя бы осознавать, когда они управляют тобой - и то хорошо. С другой стороны, без них скучно. Сидел бы все время и пялился в монитор, а так попереживал немного! :) Да и других побочных положительных эффектов - масса.
Благодарю всех за внимание! Тех, кто был рядом, кто остается и кто будет.
Когда-то давно, будучи 11 лет от роду, я пытался вести дневник.
Навеяно это было вполне типичной причиной: влюбился в одноклассницу :)
Читал я его последний раз очень давно, но одна запись оказала неизгладимое впечатление. Тем, что она совершенно никаким образом не позволяла восстановить в памяти события! Звучала она так: "Важное открытие об [имя_девушки]". Когда делал эту запись, я был уверен, что никогда не забуду об этом архиважном открытии! Записывал просто чтобы зафиксировать, когда это произошло. Но не прошло и полгода, как говорится - и дата осталась, а событие - нет :)
С тех пор, если вел дневник, то я старался описывать события более конкретно, чтобы можно было вспомнить, что имелось в виду :)
И это работает. Открою какие-нибудь записи 10-летней давности... И в памяти возникают образы тех времен. Иногда поражаешься даже, что забыл, что описанные в дневнике события вообще происходили, но благодаря записям снова можешь вспомнить все до мелких деталей.
С другой стороны, несмотря на подробность, эти записи имеют мало смысла для другого человека без приложения к ним моей памяти :) картина получается неполная, непонятная. Невозможно понять роль некоторых событий, установить смысл фраз, найти причины и следствия. Дело не в том, что я путал или шифровал записи, нет... Просто в формате дневника нельзя описать контекст полностью. Неизбежно приходится опускать что-то... Те детали, которые мне кажутся излишними, могут сделать невозможным понимание сути неподготовленным читателем.
Я давал почитать свои (личные) записи одному человеку... Результат был, мягко говоря, плачевным :)
Публичный дневник, вроде этого - дело другое. Здесь я пишу для широкой аудитории читателей - настоящих и будущих, которые первый раз со мной знакомы. Поэтому стараюсь, чтобы было понятно для всех.
Но даже публичные дневники... В значительной степени... Не лишены этого свойства - быть лишь путеводными вехами на дорожке к памяти человека. Только автор может до конца знать смысл каждой строчки.
Надо срочно оправдывать популярность11-10-2007 21:48
Обнаружил, что мой прошлый пост про микросхему MC34063 занимает первые места в результатах поиска информации о ней на рамблере. Надо срочно что-то делать чтобы оправдать такую популярность! Написать, что ли, руководство по применению? :)
Не знаю, почему я его решил маленьким назвать... Оно от этого не менее захватывающее. Просто, наверно, потому, что надеюсь, что может быть больше :) Или дольше.
Вот так вот неожиданно совершенно. Не думал, что в такой обстановке ему есть откуда взяться :) Искал бы специально - не нашел бы.
Мне просто классно сейчас. Давно такого не было. Спасибо тебе, Жизнь!
С давних пор в Win32 API существует функция PulseEvent. Я никогда не использовал ее, потому что не находилось подходящих применений. Даже гипотетически. Но функция была, и я знал, что она есть и будет в наличии, когда понадобится.
Сегодня, читая свежую версию SDK, я случайно наткнулся на эту функцию и обнаружил, что она, оказывается, ненадежная! И поэтому ее не следует использовать. Вообще.
То есть она не всегда делает то, что должна делать.
В документации описано, почему так получается. Не написано там, что это неисправимо. Но я изучал в свое время исходники ReactOS и видел, как эта функция реализована. Чтобы сделать ее надежной, придется пол ядра винды перелопатить, потерять в эффективности - а толку мало, так как функция не очень нужная. Поэтому от нее проще отказаться.
И состояние духа приподнятое, легкое. Одним словом - классно на душе! Давно такого не было. Хотя вроде внешних причин тому нет. Наверно, скоро все вернется на круги своя, к будничному.
Всем известно, что когда у человека все в порядке в личной жизни, то к нему начинают тянуться другие потенциальные партнерши (или партнеры :)
Так вот, я заметил на одной знакомой даме, что с ней приятно и весело общаться тогда, когда она счастлива со своим партнером. И наоборот, когда в личной жизни не все в порядке, то она становится агрессивной, придирчивой и вообще.
Порядок и удовлетворенность в личной жизни создают душевную гармонию.
А гармония и здоровье - это то, что нас привлекает в людях, на биологическом уровне.
И ведет это влечение в тупик, то есть к такому человеку, которому ты не нужен, так как в его жизни рядом уже есть все, кто ему нужен :)
На примере двух девушек увидел, как это по-настоящему: чистая, бескорыстная, от всей души любовь. Столько терпения, заботы о любимом... Просто дух захватывает от восхищения, когда видишь такое. И главное - мимо нельзя спокойно пройти. Если на тебя будут обращены такие чувства, то волей-неволей проникнешься симпатией к этому человеку, вниманием.
Есть чему поучиться у этих девушек. Радует, что сам тоже нахожусь на верном пути :)
Еду сегодня в автобусе и вижу - катится по улице тележка с ящиками. Ну типа таких тележек, которые стоят в хлебных фургонах и на которых завозят в магазины хлеб. Ну вот, значит, катится она сама по себе, без помощи человека. Думаю: "наверно под горку катится, а грузчик следом идет". Однако что-то она странно катилась - не так, как обычно тележки под горку катятся - не ускоряясь, не замедляясь и немного виляя в стороны. И грузчик все не появлялся. "Полтергейст" - подумал я. Позже выяснилось, что грузчик шел сбоку от тележки, с противоположной от меня стороны, поэтому его видно не было :) Но не в этом дело.
Я задумался о самом слове "полтергейст" - откуда оно могло взяться и что может означать. И тут меня осенило.
Это немецкое слово "Poltergeist". Poltern означает "топать, шуметь", а Geist - "призрак". Таким образом, загадочное и наукообразное слово "полтергейст" означает всего лишь "топающий призрак". Ничем не более научно, чем наш "домовой" :)
Взялся обмерять новую версию своего прибора... В той части схемы, которую я обмерял, изменений не было, по сравнению с испытанной прошлой версией, так что я не ожидал подвоха. Но он пришел. Сигналу полагалось затухать на более высоких частотах - вместо этого он становился там сильнее. Фазовая характеристика оказалась странной, необъяснимой.
И вы думаете, я растерялся?
Вообще-то да :) В первый момент. Начал тыкаться и замыкать сигнал на землю... Одновременно с лихорадочными размышлениями. Вдруг обнаружил, что сигнал не пропадает, когда его закорачиваешь. А должен был! Начал исследовать ситуацию подробнее. Похоже на емкостную наводку. Посмотрел разводку платы. Как раз рядом со слабым сигналом проходит дорожка с его более сильной версией. Она шла на другой узел схемы. Перерезал ее. Помогло!
Осталось восстановить работоспособность другого узла схемы, куда шел сильный сигнал. Кинул проводок вместо перерезанной дорожки. Наводка вернулась, правда в меньшей степени. Проделал еще несколько манипуляций, добился нормальной работы. Это было уже делом техники, когда знаешь главную причину неполадок.
Выводы?
1. Во многих ситуациях разводка платы играет решающую роль.
2. Даже при незначительных изменениях в схеме или разводке платы нет никакой гарантии, что прибор заработает. На окончательных стадиях отладки следует избегать внесения в схему существенных изменений.
3. Такие, казалось бы, простые эффекты, как емкостная наводка, проявляют себя подчас таким странным образом, что загоняют в тупик мозги :) Положил в копилку опыта еще один небольшой его кусочек.
И это не просто так с неба на голову свалилось, а было результатом порядочного отношения к людям сквозь годы.
Иногда даже пугаешься масштабом... Оправдать доверие подчас бывает нелегко. Но трудно найти более благородную причину приложить большие усилия, чем ради оправдания доверия.
Я сам иногда тоже пугаюсь, сколько доверяю другим. Ведь немало. И вся жизнь на этом держится.
А ведь в былые старые времена даже не было туризма. Путешествовать где-то без войска было равносильно самоубийству. Если люди почувствуют, что ты перед ними беззащитен - ни минуты сомневаться не будут, разграбят, убьют, закопают и скажут, что так и было. Так было раньше...
Мой новый прибор при первых испытаниях показал очень высокий уровень помех. Ну что ж, не первый раз :) Я настроился на долгую и изнурительную борьбу с шумом. Но вчера, после того, как я сделал небольшое изменение в схеме, то помехи почти полностью исчезли!
Конечно, я неспроста делал это изменение и надеялся, что оно улучшит ситуацию. Но чтобы настолько! Такое у меня бывало нечасто. Воистину сюрприз :) Классно иметь такой большой опыт, чтобы быстро подмечать возможные причины неполадок. Иметь бы еще достаточно времени чтобы реализовать все возникающие идеи!