|
相当急,快又要搞通宵了。WIN CE上的串口编程问题
[复制链接]
我写了个程序。在WINDOW CE上跑的,我用VS2008建立了个MFC智能程序。
我用串口调试助手测试,助手不停的发送数据。发现助手上能接收CE上发来的消息,可是CE上的程序却一直阻塞(或者我把线程里面的代码改成一直在读的时候。都是没读到任何东西。)
第一次写CE,希望哪位大大指点
具体代码如下:
- //按钮事件
- OnBnClickedreaddata()
- {
- if(!OpenCom())
- {
- MessageBox(L"Open Fail");
- return;
- }
- WriteFile(hCom,"asda22\r\n",20,0,NULL);
- CreateThread(
- NULL, //安全属性使用缺省。
- 0, //线程的堆栈大小。
- ReadThreadFunc, //线程运行函数地址。
- this, //传给线程函数的参数。
- 0, //创建标志。
- 0); //成功创建后的线程标识码。
- return;
- }
- /////////////////////////////////////////////////
- OpenCom()
- {
- DWORD dwError;
- LPCWSTR lpError=L"com1 open Error",lpOpenSucc=L"com1 open success";
- hCom = CreateFile(L"COM1:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
- if (hCom == INVALID_HANDLE_VALUE)
- {
- dwError = GetLastError();
- MessageBox(lpError);
- return FALSE;
- }
-
- else
- {
- SetCommMask (hCom, EV_RXCHAR);//指定端口监测的事件集
- SetupComm(hCom,1024,1024);//分配设备缓冲区
- PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);//初始化缓冲区中的信息
- if(!initDCB())
- return FALSE;
-
- // if(!InitComTimeouts())//设置端口超时值
- // return false;
- //设置端口上指定信号的状态
- // EscapeCommFunction (hCom, SETDTR);// SETDTR: 发送DTR (data-terminal-ready)信号
- // EscapeCommFunction (hCom, SETRTS);// SETRTS: 发送RTS (request-to-send)信号
- return true;
- }
- }
- ////////////////////////////////////////////////////
- initDCB()
- {
- DWORD dwError;
- dcb.DCBlength=sizeof(DCB);
- GetCommState(hCom,&dcb);
- dcb.BaudRate = 9600; //波特率为9600
- dcb.ByteSize = 8; //数据位数为8位
- dcb.Parity = 0; //偶校验
- dcb.StopBits = ONESTOPBIT; //1个停止位
- dcb.fBinary =TRUE;
- if (!SetCommState(hCom, &dcb))
- {
- MessageBox(L"Set DBC Error");
- dwError = GetLastError ();
- return FALSE;
- }
- else
- {
-
- return TRUE;
- }
- }
- //////////////////////////////////////////////////////////////
- DWORD WINAPI ReadThreadFunc(LPVOID lparam)
- {
- Cwince_AppDlg * Dlg = (Cwince_AppDlg*)lparam;
- BYTE Byte;
- int iCounter = 0;
- DWORD dwBytes;
- char ReceiveBuf[1000]; ///缓冲区的大小
-
- SetCommMask (Dlg->hCom, EV_RXCHAR); ///只接收字符
- while (Dlg->hCom != INVALID_HANDLE_VALUE)
- {
- DWORD dwCommStatus;
- WaitCommEvent(Dlg->hCom, &dwCommStatus, 0);
- SetCommMask (Dlg->hCom, EV_RXCHAR); ///重新设置要等待的信号
- //// 接收数据
- do
- {
- ReadFile(Dlg->hCom, &Byte, 1, &dwBytes, 0);
- if(dwBytes == 1)
- {
- MessageBox(NULL,L"get ",NULL,NULL);
- ReceiveBuf[iCounter++] = Byte;
- if(iCounter == 1000)
- {
- ///L"接收缓冲区已满";
- return -1;
- }
- }
- } while (dwBytes == 1);
- if(iCounter == 0) ///没接到数据
- {
- continue;
- }
- } ///////end while
- return 0;
- }
复制代码
|
|