如何处理wince接收数据丢包的情况

xuebatiantang xuebatiantang 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我的wince下处理数据的方法是由于是115200的波特率所以我设置每组40B的数据间隔5ms循环240发送过来,发送之后先存入我定义的一个1024*20的数组中,然后所有的发送结束后开始处理数组中的数据,在PC上通过串口助手进行实验数据接收情况特别好,但是存在着问题
一、将程序移植到wince上按理说是240组的数据,丢包率很高,而且我即使发送很小的数据也会丢,之前写的及时收及时处理的程序处理小量的数据不会丢包,但是到大数量就不理想。
二、我想通过判断数据中VA这个字符来根据系统时间创建文件,为什么我写的strTemp.Find(_T("VA")) != -1这一段一直不执行,我试过left等方法都不执行那一段语句,请问是什么问题

这是我的接受处理的代码,试验了好多次了,一直是没有找到解决的办法
CString str;

DWORD dwWrite = 0;//实际写入的字节量,作为返回值
int nTextLength;
if ((m_bPortOpened == FALSE) || (wParam & EV_RXCHAR) != EV_RXCHAR)
{
SetEvent(m_hPostMsgEvent);
return 0L;
}
//通知该函数处理数据,循环接收数据放到大数组中
DWORD dwLength = 0;
COMSTAT ComStat;
DWORD dwErrorFlags;
char* buf = new char[RECVSIZE];
ClearCommError(m_hComm, &dwErrorFlags, &ComStat);
dwLength = ComStat.cbInQue;

ReadFile(m_hComm, buf, dwLength, &dwLength, 0);
memcpy(&pRecvBuffer[pRecvNum], buf, dwLength);
pRecvNum += dwLength;//首地址移动写入数据的长度
nCount++;//写入一次+1,如果处理不同数据则根据具体情况选择判断依据
delete[] buf;
//数据接收完成存入数组中
if (nCount != 240)
{
SetEvent(m_hPostMsgEvent);
return 0L;
}
else
{
pRecvNum = 0;
nCount = 0;
}

CString strTemp;
strTemp.Format(_T("%s"), pRecvBuffer);

if (strTemp.Find(_T("VA")) != -1)
{
//创建文件,准备写入
}

//应该选择更合理的判断条件
for (int i = 0;i<240*40 ; i++)
{
switch (pRecvBuffer[i])
{

case 'W':
{
str += pRecvBuffer[i];
str += _T("\r\n");

DWORD strLength = str.GetLength()*sizeof(TCHAR);
WriteFile(hFile, str, strLength, &dwWrite, NULL);
//nTextLength = m_editReceive.GetWindowTextLength();
//m_editReceive.SetSel(nTextLength, nTextLength); //移动插入光标到正文末尾
//m_editReceive.SetSel(-1, 0);
//m_editReceive.ReplaceSel(str); // 向编辑视图中插入收到的字符
str.Empty();

break;
}
default:
str += pRecvBuffer[i];
}
}

ZeroMemory(pRecvBuffer, RECVSIZE);

AfxMessageBox(_T("yiqingkong"));
//使m_hPostMsgEvent成为有信号,即允许发送下一个WM_MY_MESSAGE消息
SetEvent(m_hPostMsgEvent);
return 0L;


...全文
评论 11
收藏 已收藏
分享
返回顶部
xuebatiantang
嵌入开发(WinCE) 19,524 成员 41,565 内容