最近自己用VC++写了个串口收发的程序,但是程序发送是正常的,接收不正常,需先打开在关掉调试助手才能接

我是通过U转串口线与ARM通讯,我的程序每次给ARM发4个字节的数据,ARM板通过串口回复一个“shoudao”,然后继续等待4个字节的输入。通过ARM上的指示灯判断来看... 我是通过U转串口线与ARM通讯,我的程序每次给ARM发4个字节的数据,ARM板通过串口回复一个“shoudao”,然后继续等待4个字节的输入。通过ARM上的指示灯判断来看,ARM能正确收到4个字节的数据,并能回复。但是我的程序却停在WaitForSingleObject函数不返回,加上了SetCommTimeouts函数设置超市时间后能接收,但只收到一个字符u或m,我的串口是异步打开的。接收是在一个独立的线程中进行的。接收部分代码如下:
char recvbuffer[1024]={0};
char test[80];
ULONG i=0;
CMyDlg *dlg=(CMyDlg*)lpParameter;
ULONG errcode,redcode,num,recvnum=1024;
OVERLAPPED ov_read;
DWORD dwErrorFlags,evmask;
COMSTAT comstat;
memset(&ov_read,0,sizeof(OVERLAPPED));
ov_read.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
//CString recv_content;
dlg->GetDlgItemText(IDC_RECV,dlg->m_recvstr);
//WaitCommEvent(m_hcom,&evmask,&ov_read);
while(1)
{

ClearCommError(dlg->m_hcom,&dwErrorFlags,&comstat);
redcode=ReadFile(dlg->m_hcom,recvbuffer,recvnum,NULL,&ov_read);
errcode=GetLastError();
if(redcode==0)
{
if(errcode==ERROR_IO_PENDING)
{

WaitForSingleObject(ov_read.hEvent,INFINITE);//在没有打开过调试助手或修改超时时间前,此函数一直不返回
//GetOverlappedResult(dlg->m_hcom,&ov_read,&num,TRUE);

recvbuffer[ov_read.InternalHigh]='\0';
dlg->m_recvstr+=recvbuffer;
dlg->SetDlgItemText(IDC_RECV,dlg->m_recvstr);

PurgeComm(dlg->m_hcom,PURGE_RXCLEAR);
ResetEvent(ov_read.hEvent);
}

}
else
{
dlg->m_recvstr+=recvbuffer;
dlg->SetDlgItemText(IDC_RECV,dlg->m_recvstr);

}

}

return 1;
此外我还发现,当我打开串口调试助手,然后关掉。再打开我自己的程序,收发就都正常了。再重插一次串口线,就又会不正常。真是郁闷啊。
展开
 我来答
softcloud84071
2011-03-10 · 超过29用户采纳过TA的回答
知道答主
回答量:94
采纳率:0%
帮助的人:75.4万
展开全部
你这段程序的问题在于ReadFile函数在线程中本来就可以进入阻塞,不需要用信号量来进行控制。如果采用信号量也是用于和其它线程之间的交互控制,试试不采用信号量进行控制就OK了。
更多追问追答
追问
我的用异步方式创建的串口句柄,ReadFile在调用之后就返回了,并不阻塞线程啊!
追答
readFIle函数进入阻塞,当读不到数据时就停在那儿了,如果不信,你可以不用线程的方式,看看程序会不会未响应
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wys435dd
2011-03-17
知道答主
回答量:6
采纳率:0%
帮助的人:6.4万
展开全部
dcb.Stopbits 0表示1位停止位,1表示1.5位停止位,2表示2位停止位
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式