【问题标题】:Unix serialport program with qt crashes带有 qt 的 Unix 串行端口程序崩溃
【发布时间】:2013-11-06 09:43:49
【问题描述】:

我正在用 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);
        }
    }
}

【问题讨论】:

  • 你尝试过使用调试器吗
  • 是的。但它说“gdb 进程意外退出”我是 qt 和 ubuntu 的新手。我不知道这是什么意思?
  • 转到项目>运行选项>执行并取消选中“在终端中运行”
  • 已经取消勾选。
  • @thehilmisu:你为什么不使用 QtSerialPort?

标签: c++ qt unix serial-port qtserialport


【解决方案1】:

对这个用例使用 Qt 5.1 SerialPort 支持可能会更好:
在 Qt 项目主页上查看有关 QSerialPort documentation 的更多信息以及示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 2013-10-23
    • 2016-08-27
    • 1970-01-01
    相关资源
    最近更新 更多