关于QSerialPort漏字符问题

jupipe_guanly 2018-01-10 09:15:24
如果我这么做,请问有没有可能漏字符问题?

void MyClass::openSerial()
{
serial = new QSerialPort("COM1");
serial->setBandrate(QSerialPort::Baud9600);
...
connect(serial, SIGNAL(dataReady()), this, SLOTS(receiveData()));
}

void MyClass::receiveData()
{
QByteArray data = serial->read(1);
switch(data.at(0) & 0xff)
{
// 判断包头、包数据和包尾
}
}
...全文
1627 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
robotRIS 2018-01-20
  • 打赏
  • 举报
回复
这样子读速度快的时候可能后出现延迟现象
Acuity. 2018-01-15
  • 打赏
  • 举报
回复
引用 5 楼 jupipe_guanly 的回复:
@Acuity- 我想你是对的,slot函数不适合做数据处理,即使进行逻辑型处理也不适合,因为可能丢数据。 至于你提到的环形缓冲区和处理线程,我想到了QQueue+生产者/消费者的方法,也许可用。
对的,用qt现成的缓冲区也可以。
jupipe_guanly 2018-01-15
  • 打赏
  • 举报
回复
@Acuity- 我想你是对的,slot函数不适合做数据处理,即使进行逻辑型处理也不适合,因为可能丢数据。 至于你提到的环形缓冲区和处理线程,我想到了QQueue+生产者/消费者的方法,也许可用。
Acuity. 2018-01-15
  • 打赏
  • 举报
回复
1、不要在槽函数处理数据;加环形缓冲区,接收到的数据全部扔进缓冲区; 2、开一个线程,专门用于处理缓冲区的数据,判断、读写、计算。。。等等。
xqhrs232 2018-01-14
  • 打赏
  • 举报
回复
最近也用了下,不大好使,也不知道是不是自己那里没整对!!!
jupipe_guanly 2018-01-14
  • 打赏
  • 举报
回复
@Marcelxx,那怎么知道所有数据都读出来了呢,加定时器吗?
Marcelxx 2018-01-11
  • 打赏
  • 举报
回复
将所有数据读出来,再来判断包头不行么?

16,202

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧