各位論壇大蝦好,由于專案需要,我這邊參考龔建偉老師:SCOMMV2.3串口除錯助手,改寫串口除錯軟體;波特率是115200,可以正常接收開發板的內核資訊,但是存在延時;我給開發板斷電后,mfc串口界面還在接受內核資訊,過一會才停止;使用的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="https://bbs.csdn.net/topics/***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;
}
uj5u.com熱心網友回復:
注意清理接識訓沖區轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/130515.html
