【问题标题】:How to set low latency in serial port open by QSerialPort如何在 QSerialPort 打开的串口中设置低延迟
【发布时间】:2020-12-09 05:32:26
【问题描述】:

我已经开发了一个应用程序,它可以与传感器进行串行通信。 由于未知原因,我收到的数据在使用 QT C++ 框架时很慢。

我已经测试了示例代码 (https://www.pjrc.com/tmp/host_software/receive_test.c)。我使用此示例代码在适当的时间收到了数据。 在这里我发现设置了低延迟模式ASYNC_LOW_LATENCY

我已阅读 (https://doc.qt.io/qt-5/qserialport.html),但不知道如何使用 QSerialPort

设置低延迟

Q1:请给sample code in qt c++ with QSerialPort 如何设置低延迟。

请不要建议在 qt c++ 中编写 c 代码,这不是解决此问题的正确方法。

QSerialPort *pUsbSerialPort;
pUsbSerialPort = new QSerialPort();
if(IS_VALID_OBJ(pUsbSerialPort))
{
    pUsbSerialPort->setPortName(sSerialPort);
    pUsbSerialPort->setBaudRate(BaudRate);
    pUsbSerialPort->setDataBits(QSerialPort::Data8);
    pUsbSerialPort->setParity(QSerialPort::NoParity);
    pUsbSerialPort->setStopBits(QSerialPort::OneStop);
    pUsbSerialPort->setFlowControl(QSerialPort::NoFlowControl);

    if(pUsbSerialPort->open(QIODevice::ReadWrite))
    {
        connect(pUsbSerialPort, &QSerialPort::readyRead,this , &Laser::LaserReadyRead);
        PRINT_INFO("Serial port successfully initialized" + sSerialPort);
        bIsServeropen = true;
    }
    else
    {
        PRINT_INFO("Serial port initialization failed" + sSerialPort);
        return;
    }
}
else
{
    PRINT_INFO(" Failed to assign memory to pUsbSerialPort" + sSerialPort);
    return;
}

【问题讨论】:

    标签: c++ qt qt5 c++14 qtserialport


    【解决方案1】:

    描述符是QSerialPort的句柄:

    #include <sys/ioctl.h>
    #include <linux/serial.h>
    
    // ...
    
    pUsbSerialPort->open(QIODevice::ReadOnly);
    
    int fd = pUsbSerialPort->handle();
    struct serial_struct kernel_serial_settings;
    ::ioctl(fd, TIOCGSERIAL, &kernel_serial_settings);
    kernel_serial_settings.flags |= ASYNC_LOW_LATENCY;
    ::ioctl(fd, TIOCSSERIAL, &kernel_serial_settings);
    

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多