mfc串口界面,参考龚建伟老师进行改写,接受开发板内核信息,存在延时现象
各位论坛好友,大家好,真心求帮忙!
我这边项目需要,参考龚建伟老师SCOMMV2.3串口调试助手,改写了一个串口调试,需要对开发板进行操作,波特率设置115200;改写的串口界面,接受数据存在延时;即使给开发板断电后,仍然过一段时间才停止接受数据,而不是立刻停止。这样延时现象,我不容易通过设计的串口界面,按任意键进入系统uboot进行更进一步操作开发。
这个软件是结合项目设计的,延时现象困扰了1周了,网上说有用线程处理的,但不熟悉,求帮忙指点。
串口接受数据核心代码如下,使用CSerialPort类编写的串口,帮忙分析下哪里有问题,谢谢各位了:
static long rxdatacount=0; //该变量用于接收字符计数
LONG CSCOMMDlg::OnCommunication(WPARAM ch, LPARAM port)//通信,消息响应
{ //定义变量:接受字符ch和端口port
if (port <= 0 || port > 11) //port代表串口号,取值1-10
return -1;
rxdatacount++; //接收的字节计数
CString strTemp;
strTemp.Format("%ld",rxdatacount);//输出长整型的接收数据计数rxdatacount
strTemp="RX:"+strTemp;
//m_ctrlRXCOUNT.SetWindowText(strTemp); //显示接收计数
if(m_bStopDispRXData) //如果选择了“停止显示”接收数据,则返回
return -1; //注意,这种情况下,计数仍在继续,只是不显示
//若设置了“自动清空”,则达到50行后,自动清空接收编辑框中显示的数据
if((m_ctrlAutoClear.GetCheck())&&(m_ctrlReceiveData.GetLineCount()>=50))//程序打开,默认选择自动清空
{
m_ReceiveData.Empty();
UpdateData(FALSE);
}
//如果没有“自动清空”,数据行达到400后,也自动清空
//因为数据过多,影响接收速度,显示是最费CPU时间的操作
if(m_ctrlReceiveData.GetLineCount()>400)
{
m_ReceiveData.Empty();//数据超过400行,清空界面
m_ReceiveData="***The Length of the Text is too long, Emptied Automaticly!!!***\r\n";
UpdateData(FALSE);
}
CString str; //将字符送入临时变量str存放
str.Format("%c",ch); //字符格式进行显示
//以下是将接收的字符加在字符串的最后,这里费时很多
//但考虑到数据需要保存成文件,所以没有用List Control
int nLen=m_ctrlReceiveData.GetWindowTextLength();//返回指定窗口的标题文本的字符长度
m_ctrlReceiveData.SetSel(nLen, nLen); //在编辑控件选择一定范围的字符
m_ctrlReceiveData.ReplaceSel(str); //注释后,窗口不接受数据
nLen+=str.GetLength();
m_ReceiveData+=str; //将临时变量str存放的字符,加入到接收框
return 0;
}