Qt读串口数据耗时测试

 

    QTimer *timer = new QTimer();
    connect(timer, SIGNAL(timeout()), this, SLOT(OnTimeoutSendDataToRadio1()));
    timer->start(1000);
    qDebug()<<"Start Timer...";
    m_pSerialPortWK3 = new QSerialPort();
    connect(m_pSerialPortWK3, SIGNAL(readyRead()), this, SLOT(OnDataRecvdRadio2Data())); //for Anyc
    QString comPort = "/dev/ttyWK3";//Radio 1
    m_pSerialPortWK3->setPortName(comPort);
    m_pSerialPortWK3->setBaudRate(9600);
    m_pSerialPortWK3->setDataBits(QSerialPort::Data8);
    m_pSerialPortWK3->setParity(QSerialPort::NoParity);
    m_pSerialPortWK3->setStopBits(QSerialPort::OneStop);
    if(m_pSerialPortWK3->open(QIODevice::ReadWrite))
    {
        qDebug()<<"Open:"<<comPort;
    }
    else
    {
        qDebug()<<m_pSerialPortWK3->errorString();
    }

 

 

 

void AppWork::OnDataRecvdRadio2Data()
{
    QByteArray data = m_pSerialPortWK3->readAll();
    if(data!="")
    {
        qDebug()<<"ttyWK3-Radio2 Data:"<<data;

    }

}

 

一端通过串口给电台 发数据,另一端也通过电台 收数据,经测试验证发现 QT使用信号和槽方式读一次串口数据耗时约30ms

 

下面验证使用同步方式:

 

 

即便 sleep 1 ms 去读一次串口数据, 可以看到 大概 也需要 耗时 约 30ms 才能读一次。

void AppWork::DoWork()
{
    while(1)
    {
        QByteArray data = m_pSerialPortWK3->readAll();
        if(!data.isEmpty())
        {
            qDebug()<<"Thread ttyWK3 Read Data:"<<data;
        }
        QThread::msleep(1);
    }
}

 

 

 

//bytearray转成十六进制字符串。
QString TestComPro::byteArrayToHexStr(const QByteArray &data)
{
    QString temp = "";
    QString hex = data.toHex();
    for (int i = 0; i < hex.length(); i = i + 2) {
        temp += hex.mid(i, 2) + " ";
    }
    return temp.trimmed().toUpper();
}

 //字符转16进制
char TestComPro::ConvertHexChar(char ch)
{
    if((ch >= '0') && (ch <= '9'))
        return ch-0x30;
    else if((ch >= 'A') && (ch <= 'F'))
        return ch-'A'+10;
    else if((ch >= 'a') && (ch <= 'f'))
        return ch-'a'+10;
    else return (0);
}


posted @ 2023-03-31 09:22  伟大的厨师  阅读(147)  评论(0编辑  收藏  举报