簡體   English   中英

帶有Qt的Unix串行端口程序崩潰

[英]Unix serialport program with qt crashes

我正在用qt開發一個簡單的串行端口應用程序。 我已經配置了ttyUSB0,我設法打開了端口。 但是,當從串行端口接收到數據時,我的應用程序將關閉。 這是我的代碼,有人可以知道此代碼有什么問題嗎?

提前致謝,

    #include "linkasunixserialport.h"

LinkasUnixSerialPort::LinkasUnixSerialPort()
{
    fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
    if (fd == -1)
    {
       qDebug()<<"open_port: Unable to open /dev/ttyO1\n";
       exit(1);
    }

    qDebug()<<"devttyUSB0 opened";

    fcntl(fd, F_SETFL, FNDELAY);
    fcntl(fd, F_SETOWN, getpid());
    fcntl(fd, F_SETFL,  O_ASYNC );

    tcgetattr(fd,&termAttr);
    cfsetispeed(&termAttr,B115200);
    cfsetospeed(&termAttr,B115200);
    termAttr.c_cflag &= ~PARENB;
    termAttr.c_cflag &= ~CSTOPB;
    termAttr.c_cflag &= ~CSIZE;
    termAttr.c_cflag |= CS8;
    termAttr.c_cflag |= (CLOCAL | CREAD);
    termAttr.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
    termAttr.c_iflag &= ~(IXON | IXOFF | IXANY);
    termAttr.c_oflag &= ~OPOST;
    tcsetattr(fd,TCSANOW,&termAttr);
    qDebug()<<"UART1 configured....\n";

    this->start();

}
int LinkasUnixSerialPort::bytes_available()
{
    int bytesQueued;
    if (::ioctl(fd, FIONREAD, &bytesQueued) == -1) {
        return -1;
    }
    qDebug()<<bytesQueued;
    return bytesQueued;
}

void LinkasUnixSerialPort::run()
{
    char receive_data[2];
    forever
    {
        int bytes_read = bytes_available();
        if(bytes_read > -1)
        {
            int retVal = ::read(fd, receive_data, 1);
            if(retVal != -1)
            {
                emit dataReceived(QChar(receive_data[0]));
            }

        }
        else
        {
            this->msleep(1);
        }
    }
}

對於這種用例,最好使用Qt 5.1 SerialPort支持:
有關QSerialPort文檔的更多信息,請參見Qt項目主頁上的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM