• 5980阅读
  • 5回复

[提问]关于两个串口同时进行串口通信的问题 [复制链接]

上一主题 下一主题
离线wangrunmin
 
只看楼主 倒序阅读 楼主  发表于: 2011-07-22
关键词: 串口多线程
      利用开发板的两个串口,一个从GPS读取信息,并将经纬度显示界面,然后从另一个串口将提取到的信息上传至GPRS。现在我的主界面是一个主线程数据接收(从串口一)用了一个次线程。数据上传(串口二)又用了一个次线程。现在的问题是数据能接受,但是不能上传。
      串口都是打开的,单独的接收发送没问题。
      贴次线程代码

RecvThread::RecvThread()
{
     fd=-1;
}
void RecvThread::run()                                 {
     comm();
     while(true)                                  
     {
       read(fd,comm_str,25);
  
       if(comm_str[24]==126)
       emit sendData( );
     }
}
int RecvThread::comm()                                
{
        struct termios oldtio,newtio,oldstdtio,newstdtio;
        struct sigaction sa;
        fd = open(COM1,O_RDWR ); //| O_NOCTTY |O_NONBLOCK);
        if (fd <0) {
        perror(COM1);
        return -1;
        }
        tcgetattr(0,&oldstdtio);
        tcgetattr(fd,&oldtio);
        tcgetattr(fd,&newstdtio);
        newtio.c_cflag |= CLOCAL |CREAD;
        cfsetispeed(&newtio,B57600);
        cfsetospeed(&newtio,B57600);
        newtio.c_cflag &= ~CSIZE;
        newtio.c_cflag |=CS8;
        newtio.c_cflag &=~CSTOPB;
        newtio.c_cflag &=~CRTSCTS;
        newtio.c_iflag = IGNPAR;
        newtio.c_oflag = 0;
        newtio.c_lflag = 0;
        newtio.c_cc[VMIN]=1;
        newtio.c_cc[VTIME]=0;
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd,TCSANOW,&newtio);

        sa.sa_flags = 0;
        sigaction(SIGCHLD,&sa,NULL);

}

另一个次线程代码类似,只不过是写串口。将接收到的数据发出去。想问下,怎么把两个次线程连接起来?可不可以通过信号槽,试了一下,不太行。
离线wangrunmin
只看该作者 1楼 发表于: 2011-07-22
又是一个回复的都没有。解决了。
离线wangrunmin
只看该作者 2楼 发表于: 2011-07-25
回 2楼(kukulv) 的帖子
不是很晚啊。也有问题的。能问你个问题么?QQ号能给下么?
离线zjfshowtime
只看该作者 3楼 发表于: 2011-07-29
回 1楼(wangrunmin) 的帖子
要是解决了,希望能够公布一下解决方案,不然我们浏览了也看不出什么结果啊!呵呵
离线wangrunmin
只看该作者 4楼 发表于: 2011-07-30
回 4楼(zjfshowtime) 的帖子
代码本身没问题。不过也没真正解决。可能要设计线程同步吧。我是把写和读放在一个线程里。
离线wangrunmin
只看该作者 5楼 发表于: 2011-07-30
快速回复
限100 字节
 
上一个 下一个