मैंने पहले ही एक एप्लिकेशन विकसित कर लिया है और यह सेंसर के साथ सीरियल संचार करता है। किसी अज्ञात कारण से, क्यूटी सी ++ फ्रेमवर्क के साथ मेरा प्राप्त डेटा धीमा है।

मैंने नमूना कोड का परीक्षण किया है (https://www.pjrc.com/tmp/host_software /receive_test.c)। मुझे इस नमूना कोड के साथ उचित समय में डेटा प्राप्त हुआ। यहां मैंने पाया कि कम विलंबता मोड ASYNC_LOW_LATENCY सेट है।

मैंने पढ़ा है (https://doc.qt.io/qt-5/qserialport. html) लेकिन QSerialPort के साथ कम विलंबता कैसे सेट करें, इस बारे में कोई जानकारी नहीं मिली

Q1: कृपया कम विलंबता कैसे सेट करें, इस पर QSerialPort के साथ 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;
}
2
bhvn 9 पद 2020, 08:32

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);
3
eyllanesc 9 पद 2020, 06:08