⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 定位数据的接收.txt

📁 对gps定位数据的接收
💻 TXT
字号:
//打开串口部分
m_hCom=CreateFile(sPort,
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if(m_hCom==INVALID_HANDLE_VALUE)
return FALSE;
//得到当前串口配置
DCB dcb;
dcb.DCBlength==sizeof(dcb);
GetCommState(m_hCom,&dcb);
//基本配置
dcb.BaudRate==dwBaud;
dcb.ByteSize==8;
dcb.Parity=NOPARITY;
dcb.StopBits=ONESTOPBIT;
//不使用DSR--DTR流控方式
dcb.fOutxDsrFlow=FALSE;
dcb.fDtrControl==DTR_CONTROL_DISABLE;
dcb.fNull=FALSE;
dcb.fAbortOnError=FALSE;
dcb.fTXContinueOnXoff=FALSE;
//二进制传输
dcb.fBinary=TRUE;
//配置串口设置
SetCommState(m_hCom,&dcb);
//超时设置
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout=MAXDWORD;
CommTimeOuts.ReadTotalTimeoutMultiplier=0;
CommTimeOuts.ReadTotalTimeoutConstant=0;
CommTimeOuts.WriteTotalTimeoutMultiplier=2*9600/dcb.BaudRate;
CommTimeOuts.WriteTotalTimeoutConstant=25;
SetCommTimeouts(m_hCom,&CommTimeOuts);
//设置缓冲区大小
SetupComm(m_hCom,8192,8192);
//开启数据接收线程
m_bExitListen=FALSE;
m_pReadThread=AfxBeginThread(GPSDataProc,this,THREAD_PRIORITY_TIME_CRITICAL);
.........
//接收数据部分
//中间变量
DWORD dwErrorMask;
DWORD  dwEvtMask=0;
//清空缓冲区
memset(m_cFrameBuf,0,sizeof(m_cFrameBuf));
//串口状态结构对象
COMSTAT  comstat;
//异步结构对象
OVERLAPPED ov,ovEvent;
ov.Internal=0;
ov.InternalHigh=0;
ov.Offset=0;
ov.OffsetHigh=0;
ov.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
ovEvent.Internal=0;
ovEvent.InternalHigh=0;
ovEvent.Offset=0;
ovEvent.OffsetHigh=0;
ovEvent.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
//设置事件驱动的类型
if(!SetCommMask(m_hCom,EV_RXCHAR|EV_TXEMPTY))
return;
while(true)
{
//等待接收事件
if(WaitCommEvent(m_hCom,&dwEvtMask,&ovEvent)==FALSE)
{
   if(GetLastError()==ERROR_IO_PENDING)
WaitForSingleObject(ovEvent.hEvent,INFINITE);
}
//终止侦听线程
if(m_bExitListen==TRUE)
{
//线程退出事件置位
SetEvent(m_hExitListenEvent);
return;
}
//数据到达事件发生后进行接收处理
if((dwEvtMask & EV_RXCHAR)==EV_RXCHAR)
{
do
{
   //确定接收缓冲中处于等待的字节数
ClearCommError(m_hCom,&dwErrorMask,&comstat);
if(comstat.chInQue==0)
break;
//异步读取数据到帧缓冲
if(!ReadFile(m_hCom,m_cFrameBuf+m_dwPoint,comstat.cbInQue,&m_dwActRead,&ov))
{
if(GetLastError()==ERROR_IO_PENDING)
{
//检测数据是否接受完毕
while(!GetOverlappedResult(m_hCom,&ov,&m_dwActRead,FALSE))
{
//数据尚未接收完毕
if(GetLastError()==ERROR_IO_INCOMPLETE)
continue;
}
//接收数据处理
RecvDataProc();
//手动复位
ResetEvent(ov.hEvent);
}
}
else
{
//接收数据处理
RecvDataProc();
//手动复位
ResetEvent(ov.hEvent);
}
}
while (comstat.cbInQue>0);
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -