打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
串口数据读不完整如何继续读

串口数据读不完整如何继续读

www.MyException.Cn   发布于:2013-11-02 19:41:10   浏览:15次
串口数据读不完整怎么继续读?
DWORD WINAPI ThreadFunc(LPVOID lpParam)
{

while(TRUE)
{  
DWORD dwLength=0;
COMSTAT ComStat;
DWORD dwErrorFlags=0;
DWORD SIZE;
unsigned char buff[1024],buff1[512];
memset(buff, 0, sizeof(buff));
memset(buff1, 0, sizeof(buff1));
Sleep(200);
ClearCommError(hcom,&dwErrorFlags,&ComStat);
if (ComStat.cbInQue == 0)
continue;
dwLength = ComStat.cbInQue ; 
if(dwLength>0)
{
bReadStat= ReadFile(hcom,buff,dwLength,&SIZE,NULL);TRACE1("dwLength=%d",SIZE);
if(!bReadStat)
{
return FALSE;}
if(m_bDisplay)
{
CString temp;
if(dwLength==1)
{   
int iLen = m_ctrlMyRichEdit.GetWindowTextLength();  
                    m_ctrlMyRichEdit.SetSel( iLen, iLen );
m_ctrlMyRichEdit.ReplaceSel(_T("\r\n"));
SetTime();
temp.Format(_T("%02X "),buff[0]);
AppendText((BYTE*)temp.GetBuffer(0),20,RGB(255, 0,0));
}
else if(dwLength==22)

int iLen = m_ctrlMyRichEdit.GetWindowTextLength();  
                    m_ctrlMyRichEdit.SetSel( iLen, iLen );
m_ctrlMyRichEdit.ReplaceSel(_T("\r\n"));
SetTime();
for(unsigned int i=0;i<22;i++)
{
temp.Format(_T("%02X "),buff[i]);
AppendText((BYTE*)temp.GetBuffer(0),20,RGB(255, 0,0));}
BuildData(buff);

}}
我现在是根据dwLength = ComStat.cbInQue来判断串口数据长度再输出,但是当数据分两次过来时就不能判断了,当数据第一次读不完时怎么继续读呢?另外两次长度如何累加?
分享到:

------解决方案--------------------
“按ComStat.cbInQue来的”
是 累加 这个 值 就是 上次长度。
注意及时 清零
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
WIN32串口编程详解(二)
用ReadFile读取数据有时候丢数据
用VC++实现USB接口读写数据的程序
串口编程里COMSTAT结构
串口通讯方法(WINAPI实现)
VC知识库文章 - Win32串口编程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服