VC串口通信奇怪问题,请高手指点!!!小弟拜谢!
我编写了一个串口调试小程序,可是遇到以下问题,请各位前辈和高手指点:
问题1: 随着接受数据的增多,程序越来越慢,我用的CString 对象来保存接受数据,然后显示,怎么回事,请大家帮忙看看,接受代码如下:
void CTestDlg::OnOnCommMscommBird()
{
// TODO: Add your control notification handler code here
UpdateData(true);
VARIANT variant_inp;
COleSafeArray safearray_inp;
long i = 0;
long len, k, lCheck;
BYTE rxdata[2048];
CString recvtmp, sRecvTempAll;
sRecvTempAll = " ";
if (m_mscom.GetCommEvent() == 2)
{
variant_inp = m_mscom.GetInput();
safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize();
for (i = 0; i < len; i++)
{
safearray_inp.GetElement(&i, &rxdata[i]);
}
rxdata[i] = '\0 ';
for(k=0;k <len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);
if(m_BuHexDisplay.GetCheck())//十六进制显示
recvtmp.Format( "%02X ",bt); //将字符以十六进制方式送入临时变量
else
recvtmp.Format( "%c ",bt); //将字符送入临时变量存放
sRecvTempAll += recvtmp; //加入接收编辑框对应字符串
}
m_sRecv += sRecvTempAll;
m_EdRecvmes.SetWindowText(m_sRecv);
CString sRecvCount, sRecvTCount;
if (m_bCount)//数据长度计数控制
{
m_lNumrecv += len; //接收长度增加
sRecvCount.Format( "%d ", m_lNumrecv);
m_EdRecvCount.SetWindowText(sRecvCount);
}
if (m_BuTime.GetCheck() && m_mscom.GetInBufferCount() == 0 ) //接受次数计数
{
m_lTimeRecv++;//接收次数增加
sRecvTCount.Format( "%d ", m_lTimeRecv);
m_EdTimeRecv.SetWindowText(sRecvTCount);
}
}
}
问题2:接收计数时,发送数据稍长,大概〉50个字符,接受计数就会出错,越长出错越厉害,但是出错一定次数以后就正常计数了?? 而且当加上端点调试时就不出错了,为什么???那位高手能帮的看看为什么?
大家帮忙顶一下,谢谢了啊!
[解决办法]
BYTE bt=*(char*)(rxdata+k);
为什么不直接写为
BYTE bt=*(rxdata+k);
或是
char bt=*(char*)(rxdata+k);
[解决办法]
if (m_mscom.GetCommEvent() == 2)
只表示有数据可读取
并不代表你一次传输的比方说100字符都到了啊
所以你可能会进入两次
OnOnCommMscommBird
自然计数就多了
[解决办法]
if (m_mscom.GetCommEvent() == 2)
只表示有数据可读取
我觉得你还应该进一步判断读取的是否为空,
我现在也是在做串口是接受gprs定位信息,也总是出现这种情况