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);
}