16,472
社区成员
发帖
与我相关
我的任务
分享
for( i=0;i<18;i++){
SerSend(atol((const char *)p),tmp[i]);
} for(i=0;i<20;i++){
nRet=SerRecv(atol((const char *)p), tmp2+i, 1000);
if(nRet<0)break;
}
if(tmp2[1]!=0x31&&tmp2[2]!=0xAA){
pedt->SetWindowText(" ok!!!");
return;
}
void CControllerDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
int nRet;
unsigned char *p,tmp[100];
unsigned char* pC;
memset(tmp,0,100);
CString textdata;
CString test;
switch(nIDEvent)
{
case 1:
UpdateData(TRUE);
GetDlgItem(IDC_COMBO1)->GetWindowText(textdata);
pC = (unsigned char*)(LPCTSTR)textdata;
p=(unsigned char *)pC;
nRet=SerRecv(atol((const char *)p),tmp,1);
if(nRet==0){
if(flag==true){
cstr+=tmp;
}else{
test.Format("%x",tmp[0]);
if(test.GetLength()<2){
test="0"+test;
}
cstr+=test+" ";
UpdateData(FALSE);
}
pedt->SetWindowText(cstr);
}
break;
default:
break;
}
CDialog::OnTimer(nIDEvent);
}
但是我定时器里面同样使用那个函数接收报文,就能很快接收完,所以我很奇怪。void CControllerDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
int nRet;
unsigned char *p,tmp[100];
unsigned char* pC;
memset(tmp,0,100);
CString textdata;
CString test;
switch(nIDEvent)
{
case 1:
UpdateData(TRUE);
GetDlgItem(IDC_COMBO1)->GetWindowText(textdata);
pC = (unsigned char*)(LPCTSTR)textdata;
p=(unsigned char *)pC;
nRet=SerRecv(atol((const char *)p),tmp,1);
if(nRet==0){
if(flag==true){
cstr+=tmp;
}else{
test.Format("%x",tmp[0]);
if(test.GetLength()<2){
test="0"+test;
}
cstr+=test+" ";
UpdateData(FALSE);
}
pedt->SetWindowText(cstr);
}
break;
default:
break;
}
CDialog::OnTimer(nIDEvent);
}
但是我定时器里面同样使用那个函数接收报文,就能很快接收完,所以我很奇怪。[/quote]
使用定时器接受串口数据会有很大的BUG,会出现不稳定现象,一般我都使用独立线程处理