Я разрабатываю приложение для Apalis iMX6 с Qt C ++ в Linux, и я добавил это приложение в автозагрузку с помощью 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 используется моим приложением.
нет приложение, которое работает с последовательным портом, и мое приложение запускается только один раз.
Есть идеи?
Спасибо