gpt4 book ai didi

c++ - 为什么 Qt(4.8) 串行端口 (qserialport) 分两部分从设备读取数据?

转载 作者:行者123 更新时间:2023-11-30 05:18:41 26 4
gpt4 key购买 nike

这是我的代码:(我使用了 qextserialport)

SerialPort::SerialPort(QString port)
{
sp=new QextSerialPort;
sp->setPortName(port);
/*port->setBaudRate(BAUD9600);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_2);*/
sp->setBaudRate(BAUD115200);
sp->setDataBits(DATA_8);
sp->setFlowControl(FLOW_OFF);
sp->setParity(PAR_NONE);
sp->setStopBits(STOP_1);
sp->open(QIODevice::ReadWrite);
connect(sp,SIGNAL(readyRead()),this,SLOT(ReadData()));

}

void SerialPort::ReadData()
{
QByteArray ba;
ba.resize(512);
ba=sp->readAll();
emit DataRecieve(ba);
}

此代码首先在 Ubuntu 上运行并显示从设备接收的所有字节,但是当我在 linux 嵌入式设备中测试它时,此代码分两部分从串行设备读取数据。 () 我的字节中没有\n。我将代码更改为以下代码:

void SerialPort::ReadData()
{
QByteArray ba;
ba.resize(512);
if(sp->bytesAvailable()>0 || sp->waitForReadyRead(20000))
{
qDebug()<<sp->bytesAvailable();
ba=sp->readAll();
qDebug()<<ba.toHex();
emit DataRecieve(ba);
}
}

但我的输出还是:

4 "aa5524010400000000000000"   
12 "000000000000000000002801"

但它应该是:

"aa5524010400000000000000000000000000000000002801"

我的输出大小可能是 48 字节或 512 字节

最佳答案

这取决于串口驱动缓冲区。例如,您可以在一个就绪字节上获得 readyRead() 信号。您应该将接收到的字节保存到中间缓冲区并最终处理它。

关于c++ - 为什么 Qt(4.8) 串行端口 (qserialport) 分两部分从设备读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41543578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com