为什么Qt(4.8)串口(qextserialport)分两部分从设备读取数据
Why the Qt(4.8) serial port(qextserialport) readind data from device in 2 part?
这是我的代码:(我使用了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 嵌入式设备中对其进行测试时,这段代码从串行设备读取数据分为 2 部分。 () 我的字节中没有 。我将代码更改为此代码:
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()
信号。毕竟,您应该将收到的字节保存到中间缓冲区并对其进行处理。
相关文章:
- 如何在ros2中从rosbag2读取数据
- OpenCV 和从 OutputArrays 或 (Mat) 读取数据
- 使用C++从磁卡读卡器MT188读取数据
- HDF5 简单读取数据集失败
- 嵌套结构,从由空行分隔的文件中读取数据
- 不要从输入队列套接字读取数据
- 从文件中读取数据,操作员>>
- 如何从excel文件中读取数据并存储到变量中?
- C++:从文件中读取x y数据会产生无限循环吗
- 无法通过FT232RL读取数据
- 如何从QNetworkReply读取数据?
- C++ 逐行从文件(包含空格)读取数据
- 通过显示一行星号来创建条形图,该条形图将读取数据的输入文件
- 我们可以从 TXT 文件中读取数据并使用 C 和 C++ 将其保存到 SQL 数据库吗?
- 从多个 tcp 连接读取数据
- 从文本文件中读取数据并删除所有换行符空格,并在 C++ 控制台中显示
- Qt TCP服务器不从客户端读取数据
- 累积从 C++11 中的文件中读取数据的整数
- 从 txt 文件中读取数据的最简单方法
- 从 txt 文件中读取数据的 Getline