16,471
社区成员
发帖
与我相关
我的任务
分享
while(1)
{
ClearCommError( COMDEV( npTTYInfo ), &dwErrorFlags, &ComStat );
if( ComStat.fRlsdHold )
{
dwTick1 = dwTick2 = GetTickCount();
R = 310;
}
else
{
dwTick2 = GetTickCount();
if ( dwTick2-dwTick1 >= R )
break;
}
}
PurgeComm( COMDEV( npTTYInfo ), PURGE_TXABORT |PURGE_TXCLEAR );//清发送缓冲区
//发HART帧
EscapeCommFunction( COMDEV( npTTYInfo ), SETRTS );
lpParam->bReadResponse = FALSE; //用该标志来控制读响应线程的启/停
fWriteStat = WriteFile( COMDEV( npTTYInfo ), byBuffer, dwLen,
&dwBytesWritten, &WRITE_OS( npTTYInfo ));
dwTick1 = dwTick2 = GetTickCount();
if (!fWriteStat)
{
if(GetLastError() == ERROR_IO_PENDING)
{
while(!GetOverlappedResult( COMDEV( npTTYInfo ),
&WRITE_OS( npTTYInfo ), &dwBytesWritten, TRUE ))
{
dwError = GetLastError();
if(dwError == ERROR_IO_INCOMPLETE)
{
// normal result if not finished
dwBytesSent += dwBytesWritten;
continue;
}
else
{
// an error occurred, try to recover
wsprintf( szError, "<CE-%u>", dwError ) ;
OutputDebugString(szError);
ClearCommError( COMDEV( npTTYInfo ), &dwErrorFlags, &ComStat ) ;
break;
}
}
dwBytesSent += dwBytesWritten;
}
else
{
ClearCommError( COMDEV( npTTYInfo ), &dwErrorFlags, &ComStat ) ;
return ( FALSE );
}
}
dwTick2 = GetTickCount();
Sleep((dwBytesSent+1) * 9.16 - (dwTick2 - dwTick1));
nField = RCV_PREAMBLE;
nPreCount = 0;
lpParam->bReadResponse = TRUE; //用该标志来控制读响应线程的启/停
dwTick1 = dwTick2 = GetTickCount();
//清接收缓冲区
PurgeComm( COMDEV( npTTYInfo ), PURGE_RXABORT |PURGE_RXCLEAR );
EscapeCommFunction( COMDEV( npTTYInfo ), CLRRTS );
//check the first char return
dwWait = WaitForSingleObject(g_hReadEvent,R1);
if(dwWait == WAIT_OBJECT_0)
return TRUE;
return FALSE;
这是我发写和读的那部分代码,出现乱码的时候return返回不了true,直接执行到最后返回false了,我的R1是380