WinXP проблема COM-порта !!!

  • Автор темы GR
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G
#1
Есть консольное Win-приложение, читающее данные из прибора через COM-порт. При запуске нескольких экземпляров приложения в Win98, данные нормальным образом читаются параллельно из двух приборов (COM1, COM2). При попытке проделать тоже самое под XP возникают какие-то недоразумения. Два экземпляра начинают работать синхронно, т.е. сначала читает одна программа, затем идет переключение на вторую, первая при этом ждет и так далее ... Может кто сталкивался с такими проблемами в XP, возможно что-то связанное с потоками. Возможно есть характерные особенности работы с портами и потоками под XP.
 
?

????

#2
GR
А как в программе реализована работа с портами? Напрямую XP этого не даёт.
 
G
#3
Работа реализована стандартными API-функциями, которые вобщем- то детально описаны в MSDN-е. Ни слова о особенностях их функционирования под XP не написано, и видимо, я так понимаю, никаких особенностей и быть не должно, однако не работает ....
А что значит напрямую не дает, каким же тогда образом ведется работа и где можно найти документацию ? Спасибо.
 
?

????

#4
GR
Мне было интересно знать используется ли в программе что-то типа:
asm:
out dx, ax
C:
outport(...)
.
.
.
Или используеся CreateFile .... и подобные.
Дело в том, что первые варианты используют привелигированные инструкции и могут выполняться только в Ring0, программы же выполняются в Ring3. Вариант - использования собственного драйвера (а они выполняются в Ring0), использование дополнительных модулей разными способами дающих необходимый результат. В 98 в виду её "незащищенности" в Ring3 можно было спокойно выполнять привелигированные инструкции почти без проблем, в ХР с этим строго.
Если используется что-то типа
Код:
hPort = CreateFile (lpszPortName, // Pointer to the name of the port
          GENERIC_READ | GENERIC_WRITE,
                 // Access (read-write) mode
          0,      // Share mode
          NULL,     // Pointer to the security attribute
          OPEN_EXISTING,// How to open the serial port
          0,      // Port attributes
          NULL);    // Handle to port with attribute
                 // to copy
то тут уже надо разбираться посерьёзней.
 
Статус
Закрыто для дальнейших ответов.