【发布时间】:2020-02-04 11:43:09
【问题描述】:
我正在 Linux 中使用 Qt C++ 为 Apalis iMX6 开发应用程序,我已通过 profile.d 将此应用程序添加到启动中
此代码必须将 ttymxc1 设置为 RS485 模式,如下所示:
int enableRS485(){
struct serial_rs485 rs485conf;
int fd = open ("/dev/ttymxc1", O_RDWR);
if (fd < 0) {
printf("Error: Can't open: /dev/ttymxc1 %d\n",fd);
return fd;
}
rs485conf.flags |= SER_RS485_ENABLED;
rs485conf.flags &= ~(SER_RS485_RTS_ON_SEND);
rs485conf.flags |= SER_RS485_RTS_AFTER_SEND;
rs485conf.flags |= SER_RS485_RX_DURING_TX;
err = ioctl (fd, TIOCSRS485, &rs485conf);
if (err < 0) {
printf("Error: TIOCSRS485 ioctl not supported.\n");
return err;
}
err = close (fd);
if (err < 0) {
printf("Error: Can't close: /dev/ttyLP1 %d\n",err);
return err;
}
return 0;
}
这个功能也很好用,没有问题。但是当我尝试在启动期间打开串行端口有时时,应用程序无法获取此串行端口,并且 QSerialPortInfo 显示 ttymxc1 正在使用中。我的串口初始化如下:
void SerialClass::initSerial()
{
m_serialPort = new QSerialPort();
enableRS485();
sleep(1);
m_serialPort->setPortName("/dev/ttymxc1");
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);
m_serialPort->setBaudRate(9600);
m_serialPort->setRequestToSend(false);
bool res = m_serialPort->open(QIODevice::ReadWrite);
}
“QSerialPort::errorOccured” 信号将发出值“PermissionError”
但神秘地“ls -l /proc/[0-9]/fd/ |grep /dev/ttymxc1”显示我的应用程序正在使用 ttymxc1。
没有适用于串口的应用程序,我的应用程序只运行一次。
有什么想法吗?
谢谢
【问题讨论】: