求助大神!!!CSerialPort类串口接收问题 20

这种串口接收写法为什么在串口调试助手发送周期是1s时,就丢好多数,这是为什么?波特率是19200。voidCDataRecv::OnComm(WPARAMch,LPARA... 这种串口接收写法为什么在串口调试助手发送周期是1s时,就丢好多数,这是为什么?波特率是19200。void CDataRecv::OnComm(WPARAM ch, LPARAM port){m_strRXData +=(char)ch;If((m_strRXData.Find(0x0A)!=0)&&(m_strRXData.Find(0x0D)!=0))//找到回车和换行{int flag1=m_strRXData.Find(“$GPRMC”);//查找帧头的位置int flag2=m_strRXData.Find(0x0A);//查找帧尾的位置if(flag1!=-1){If(flag2!=-1){m_strRecdata=m_strRXData.Mid(flag1,flag2);//取出完整的一帧m_strRXData.delete(flag1,flag2);......//下面解数据帧并存储}}return 0;} 还有另一种接收写法写在定时器里,在打开串口点击按钮事件触发定时器,当串口调试助手发送周期是1s时,还算稳定,当串口调试助手发送周期变成100ms,波特率是19200,自己写的程序打开串口就死掉,波特率变成115200好像好点,我想当串口调试助手发送周期变成50ms,程序任然能稳定运行,存储不丢帧,该怎么写啊?void CDataRecv::OnTimer(){while((m_strRXData.Find(0x0A)!=0)&&(m_strRXData.Find(0x0D)!=0))//找到回车和换行{int flag1=m_strRXData.Find(“$GPRMC”);//查找帧头的位置int flag2=m_strRXData.Find(0x0A);//查找帧尾的位置if(flag1!=-1){If(flag2!=-1){m_strRecdata=m_strRXData.Mid(flag1,flag2);//取出完整的一帧m_strRXData.delete(flag1,flag2);......//下面解数据帧并存储}}} 展开
 我来答
wenqing8585
2018-03-25 · TA获得超过8252个赞
知道大有可为答主
回答量:8078
采纳率:70%
帮助的人:3864万
展开全部
检查你的OnComm函数里是不是有耗时处理,尤其是不要调用控件的显示函数。
或者先将OnComm函数里的处理改成只计算接收到了多少字节,不做多余的处理,看看字节数和串口调试助手上的发送数是否一致。。
追问
不调用控件的显示函数,是要把显示单独写函数吗,在哪调用这个单写的显示函数呢
追答
另外创建一个线程负责调用显示函数
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式