CSerialMFC 串口通信的时候怎么清空串口缓冲区 中断标志
梦竹 2012-04-16 10:41:52 我在使用CSerialMFC进行串口通信的时候,由于要求要在发送命令以后立即读数,并且数据量非常大,所以没有在OnSerialMsg中进行读数据,而是自己写了ReadData,用循环的方式读,直到读到完整的数据再退出。
这样就导致了每一次读出的数据实际上会包含上一次的数据,很是头疼,求帮助。
代码如下:
BOOL ReadData()
{
int i;
DWORD dwBytesRead = 0;
char szBuffer[ 10241 ];
const int nBufLen = sizeof( szBuffer ) - 1;
int nRead = 0;
CString StrTmp;
CString RecievedStr;
int nL;
char CTmp;
m_PADCommPort.Purge();
do
{
DWORD lLastError = m_PADCommPort.Read( szBuffer, nBufLen, &dwBytesRead, 0, 1 );
m_PADCommPort.Purge();
if ( lLastError != ERROR_SUCCESS )
{
return FALSE;
}
if ( dwBytesRead > 0 )
{
nRead += dwBytesRead;
szBuffer[ dwBytesRead ] = '\0';
StrTmp= szBuffer;
RecievedStr += StrTmp;
nL = RecievedStr.GetLength();
}
m_PADReceivedDataList += RecievedStr;
} while ( ( -1 == RecievedStr.ReverseFind( '\n' ) ) || ( -1 ==
RecievedStr.ReverseFind( '\r' ) ) );
m_PADPortHaveData = FALSE;//清楚串口有数据标志
return TRUE;
}
其中m_PADReceivedDataList 是全局变量