簡體   English   中英

如何在 QSerialPort 打開的串口中設置低延遲

[英]How to set low latency in serial port open by QSerialPort

我已經開發了一個應用程序,它可以與傳感器進行串行通信。 由於未知原因,使用 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:請在 qt c++ 中給出一個sample code ,如何設置低延遲。

請不要建議在 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;
}

描述符是 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM