我正在尝试读取写入使用com0com创建的串行端口的数据。当前配置有两个串口,即COM8和COM9相互连接。
当我使用PuTTY打开这两个串口并在一个终端中写入内容时,它会立即出现在另一个终端中。但是,当我尝试以编程方式进行时,情况就不同了。
我可以毫无问题地进行写入,但由于某些原因读取失败。我使用Tom Archer 和 Rick Leinecker 的CSerial 库。
读取数据的函数如下所示。
int CSerial::ReadData( void *buffer, int limit )
{
if( !m_bOpened || m_hIDComDev == NULL )
return( 0 );
BOOL bReadStatus;
DWORD dwBytesRead, dwErrorFlags;
COMSTAT ComStat;
SetCommMask (m_hIDComDev, 0);
SetCommMask (m_hIDComDev, EV_RXCHAR);
ClearCommError( m_hIDComDev, &dwErrorFlags, &ComStat );
if( !ComStat.cbInQue ) return( 0 );
dwBytesRead = (DWORD) ComStat.cbInQue;
if( limit < (int) dwBytesRead ) dwBytesRead = (DWORD) limit;
bReadStatus = ReadFile( m_hIDComDev, buffer, dwBytesRead, &dwBytesRead, &m_OverlappedRead );
if( !bReadStatus ){
if (GetLastError() == ERROR_IO_PENDING ){
WaitForSingleObject( m_OverlappedRead.hEvent, 2000 );
cout<< "Read data" << endl;
return( (int) dwBytesRead );
}
return( 0 );
}
return( (int) dwBytesRead );
}
当程序在此行退出时,我无法从串行端口读取数据:
if( !ComStat.cbInQue )
return( 0 );
这真的很奇怪,因为串行缓冲区有数据,但cbInQue
它告诉数据是否可用于读取操作被设置为零。
这种情况有解决方法吗?或者 com0com 中是否有任何设置需要更改?
仅供参考,我在 Windows 7 64 位上使用带有MinGW编译器的Code::Blocks IDE 。