当前位置: 技术问答>linux和unix
c++ 串口问题
来源: 互联网 发布时间:2016-09-28
本文导语: 昨天以为编译通过了结果今天调试老是断错误 class CSerial { private: //int m_fd; float jingdu; float weidu; pthread_t m_thread; static void* ReceiveThreadFunc(void* lparm);...
昨天以为编译通过了结果今天调试老是断错误
class CSerial
{
private:
//int m_fd;
float jingdu;
float weidu;
pthread_t m_thread;
static void* ReceiveThreadFunc(void* lparm);
public:
CSerial(){}
virtual ~CSerial(){}
int m_fd;
char DatBuf[512];
int m_ExitThreadFlag;
int OpenPort(int nPort,int nSpeed,int nBits,int nEvent,int nStop);
int ClosePort();
int WritePort(char *Buf,int len);
virtual int PackagePro(char* Buf,int len);
};
void* CSerial::ReceiveThreadFunc(void* lparm)
{
CSerial *pSer=(CSerial*)lparm;
int nread;
fd_set rd;
FD_ZERO(&rd);
FD_SET(pSer->m_fd,&rd);
printf("%dn",pSer->m_fd);
while(FD_ISSET(pSer->m_fd,&rd))
{
if(select((pSer->m_fd)+1,&rd,NULL,NULL,NULL)m_fd,pSer->DatBuf,512))>0)
{
char *p;
int n;
while((p=strstr(pSer->DatBuf,"$GPRMC"))!=NULL)
{
for(n=0;nweidu,&pSer->jingdu);
printf("%f %fn",pSer->weidu,pSer->jingdu);
}
}
}
}
}
这个是OpenPort里创建的线程函数 int ret=pthread_create(&m_thread,NULL,ReceiveThreadFunc,NULL);
结果是前面串口设置打开都正常 进入线程函数后发生段错误 CSerial *pSer=(CSerial*)lparm;我觉的是指针问题 C++不熟谁帮我解释下
class CSerial
{
private:
//int m_fd;
float jingdu;
float weidu;
pthread_t m_thread;
static void* ReceiveThreadFunc(void* lparm);
public:
CSerial(){}
virtual ~CSerial(){}
int m_fd;
char DatBuf[512];
int m_ExitThreadFlag;
int OpenPort(int nPort,int nSpeed,int nBits,int nEvent,int nStop);
int ClosePort();
int WritePort(char *Buf,int len);
virtual int PackagePro(char* Buf,int len);
};
void* CSerial::ReceiveThreadFunc(void* lparm)
{
CSerial *pSer=(CSerial*)lparm;
int nread;
fd_set rd;
FD_ZERO(&rd);
FD_SET(pSer->m_fd,&rd);
printf("%dn",pSer->m_fd);
while(FD_ISSET(pSer->m_fd,&rd))
{
if(select((pSer->m_fd)+1,&rd,NULL,NULL,NULL)m_fd,pSer->DatBuf,512))>0)
{
char *p;
int n;
while((p=strstr(pSer->DatBuf,"$GPRMC"))!=NULL)
{
for(n=0;nweidu,&pSer->jingdu);
printf("%f %fn",pSer->weidu,pSer->jingdu);
}
}
}
}
}
这个是OpenPort里创建的线程函数 int ret=pthread_create(&m_thread,NULL,ReceiveThreadFunc,NULL);
结果是前面串口设置打开都正常 进入线程函数后发生段错误 CSerial *pSer=(CSerial*)lparm;我觉的是指针问题 C++不熟谁帮我解释下
|
你在开线程时的语句里int ret=pthread_create(&m_thread,NULL,ReceiveThreadFunc,NULL);对参数传的是NULL。那么lparm就等于NULL。必然会造成后面的程序崩溃。