带有 qt 的 Unix 串行端口程序崩溃
Posted
技术标签:
【中文标题】带有 qt 的 Unix 串行端口程序崩溃【英文标题】:Unix serialport program with qt crashes 【发布时间】: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? 【参考方案1】:对这个用例使用 Qt 5.1 SerialPort 支持可能会更好: 在 Qt 项目主页上查看有关 QSerialPort documentation 的更多信息以及示例。
【讨论】:
以上是关于带有 qt 的 Unix 串行端口程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章