首页 > 学院 > 开发设计 > 正文

windows下获取串口中数据的长度

2019-11-11 05:20:55
字体:
来源:转载
供稿:网友

windows下可以通过调用ClearCommError来获取接收的串口数据的长度。

代码如下:

UINT GetDataSize(){ DWord dwError = 0; COMSTAT comstat; memset(&comstat, 0, sizeof(COMSTAT)); UINT size = 0; if (ClearCommError(m_hCom, &dwError, &comstat)) { size = comstat.cbInQue; } return size;}

但是通过ClearCommError获取到的并不一定是正确的数据长度,因为在你调用此函数时,数据不一定接收完成,所以在多次调用函数获得的返回值不变时,才能保证数据长度的真确。

下面修改为阻塞型(有数据函数才会返回):

UINT GetDataSize(){ DWORD dwError = 0; COMSTAT comstat; memset(&comstat, 0, sizeof(COMSTAT)); UINT size = 0; while (size == 0) { if (ClearCommError(m_hCom, &dwError, &comstat)) { size = comstat.cbInQue; } } Sleep(3); UINT newSize= 0; if (ClearCommError(m_hCom, &dwError, &comstat)) { newSize= comstat.cbInQue; } while (newSize!= size) { size = newSize; Sleep(3); if (ClearCommError(m_hCom, &dwError, &comstat)) { newSize= comstat.cbInQue; } } return newSize;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表