А вот меня ссылки с кириллицей бесят, а сам я всегда даю ссылки в urlencode, потому что иначе приходится бороться с пробелами и прочим мусором в ссылках, который автоматизированно распарсить в тексте невозможно.
Я вам расскажу одну байку, основанную на реальных событиях. Делали мы один девайс как раз на вышеописанном процессоре. Одна индустриальная машинка, управляемая с компа. Модулей несколько, от трёх до много, все подключены к компу и им дирижируются. Увы, изначальный дизайн платы был не наш, потому на некоторые решения повлиять было сложно в процессе работы — у нас были примерно 10 готовых плат, в которые мы могли вносить минимальные изменения, на них нужно было отладить работу, чтобы потом заказать редизайн и новые платы.
Так вот, изначально когда-то было принято решения, что устройства управляются через RS-232. Потом наши предшественники решили, что это не очень OK, потому как в компах количество компортов со временем стремится к нулю, и заменили их на USB CDC. На платах были разведены USB-хабы, девайсы были подключены друг к другу по цепочке, а хвост втыкался в USB-порт управляющего PC. В итоге софт переделывать практически не пришлось. И вот в таком виде девайс попал к нам.
Вроде как всё работало замечательно. До поры до времени. А именно, в нашем устройстве было много сервомоторов, шаговых двигателей, соленоидов и прочей трасцы, которая давала нехилые помехи в сеть и грозила отсечь пальцы и прочие неаккуратно оставленные на рабочих поверхностях части тела, а потому в составе девайса предусматривались средства безопасности. Предполагалось, что специальный ключ размыкает цепь, которая обесточивает некоторый контур, а специальный модуль с релюхами обесточивает всё остальное, когда это заметит. Интерлок такой, в общем. Ну а потом, соответственно, при устранении опасной ситуации все эти моторы и прочая все вместе включались, пусть и с небольшими задержками.
Вот когда мы начали этим интерлоком часто пользоваться, выяснилось, что одновременное выключение нескольких десятков работающих моторов и прочего просто начисто убивает USB. Т.е. сбрасываются все хабы и вообще всё, что есть на шине. Более того, ну ладно, сбрасываются они — и пусть, ведь подключаются сразу же назад. Оказалось, что не каждая операционная система с этим умеет бороться. К нашему сожалению, наши предшественники решили писать софт на C# и крутить его на Windows XP Embedded. Так вот, при каждом срабатывании интерлока ОС выпадала в «синий экран» в драйвере USB CDC. В качестве пробы я подключал свой лаптоп с Linux — устройства пропадали и возвращались, система никак не страдала. Мы перепробовали всё. Пробовали определять пропадание устройств, чтобы сразу же закрывать порт, думали о том, чтобы переписать нафиг драйвер (в каком-то SDK от MS есть исходники простого CDC-драйвера), была мысль даже написать userspace-драйвер на libusb (почти получилось, надо сказать). В конце концов избавились вообще от USB в пользу мультипортовой PCI-платы расширителя RS-232 и десятка экранированных кабелей. При всех теоретических недостатках RS-232 работало намного стабильнее.
Ну а следующая редакция платы просто использовала CAN (как и стоило бы делать с самого начала).
Можно, но смысла особого нету. Злоумышленник может точно так же приложить ключ к зашифрованному самостоятельно сообщению. Смысл PGP в сети доверия через подписи ключей, а сервера ключей обеспечивают инфраструктуру для работы этой сети.
Крёстный — не тот, кто учит вере. Крёстный — тот, кто берёт на себя ответственность за то, что человек получит должное духовное воспитание. Потому он может принадлежать к другой религии или быть неверующим вовсе. Главное — чтобы он выполнил то, на что «подписался».
Ну и вообще речь не о том, а о том, какова поддержка USB CDC в Windows, и каких проблем можно отгрести, если попробовать на неё положиться.
Так вот, изначально когда-то было принято решения, что устройства управляются через RS-232. Потом наши предшественники решили, что это не очень OK, потому как в компах количество компортов со временем стремится к нулю, и заменили их на USB CDC. На платах были разведены USB-хабы, девайсы были подключены друг к другу по цепочке, а хвост втыкался в USB-порт управляющего PC. В итоге софт переделывать практически не пришлось. И вот в таком виде девайс попал к нам.
Вроде как всё работало замечательно. До поры до времени. А именно, в нашем устройстве было много сервомоторов, шаговых двигателей, соленоидов и прочей трасцы, которая давала нехилые помехи в сеть и грозила отсечь пальцы и прочие неаккуратно оставленные на рабочих поверхностях части тела, а потому в составе девайса предусматривались средства безопасности. Предполагалось, что специальный ключ размыкает цепь, которая обесточивает некоторый контур, а специальный модуль с релюхами обесточивает всё остальное, когда это заметит. Интерлок такой, в общем. Ну а потом, соответственно, при устранении опасной ситуации все эти моторы и прочая все вместе включались, пусть и с небольшими задержками.
Вот когда мы начали этим интерлоком часто пользоваться, выяснилось, что одновременное выключение нескольких десятков работающих моторов и прочего просто начисто убивает USB. Т.е. сбрасываются все хабы и вообще всё, что есть на шине. Более того, ну ладно, сбрасываются они — и пусть, ведь подключаются сразу же назад. Оказалось, что не каждая операционная система с этим умеет бороться. К нашему сожалению, наши предшественники решили писать софт на C# и крутить его на Windows XP Embedded. Так вот, при каждом срабатывании интерлока ОС выпадала в «синий экран» в драйвере USB CDC. В качестве пробы я подключал свой лаптоп с Linux — устройства пропадали и возвращались, система никак не страдала. Мы перепробовали всё. Пробовали определять пропадание устройств, чтобы сразу же закрывать порт, думали о том, чтобы переписать нафиг драйвер (в каком-то SDK от MS есть исходники простого CDC-драйвера), была мысль даже написать userspace-драйвер на libusb (почти получилось, надо сказать). В конце концов избавились вообще от USB в пользу мультипортовой PCI-платы расширителя RS-232 и десятка экранированных кабелей. При всех теоретических недостатках RS-232 работало намного стабильнее.
Ну а следующая редакция платы просто использовала CAN (как и стоило бы делать с самого начала).
— Оно выдало ошибку, что делать?
Ну или сто раз жмут OK как в статье.