![](/img/trans.png)
[英]How to Read Register Map From COM serial port using Modbus Protocol? (c++)
[英]read from serial port using mavlink protocol with qt c++
我正在尝试从ardupilot读取使用mavlink协议发送数据。 如果您访问此站点:
http://qgroundcontrol.org/mavlink/start
您可以找到mavlink协议的工作方式以及我正在尝试做的事情。 在站点底部,您可以看到标题的字节排列。 我写了一些代码,它可以正常运行,但是运行了一段时间后,出现运行时错误。 据我所知,该错误与内存分配有关,但我找不到非法分配内存的位置。
这是我的读者线程代码:
QByteArray header;
quint8 ID;
QByteArray payload;
QSerialPort *serial;
void mThread::run()
{//1
while(serial->isOpen())
{//2
if(serial->bytesAvailable() >= 200)
{//3
this->msleep(1);
header = serial->read(1);
if(header.contains(254))
{//4
this->msleep(5);
header.append(serial->read(5));
if((header[3] == 1) && (header[4] == 1))
{//5
ID = header[5];
msleep(12);
payload = serial->read(header[1]);
emit updated(payload , ID);
payload.clear();
header.clear();
}//5
else
{//6
header.clear();
}//6
}//4
else
{//7
header.clear();
}//7
}//3
}//2
}//1
我正在使用qt5 whit ubuntu 14.04,我应该提到我正在使用115200baud读取数据,并且应该使用线程进行管理。 如果不读它会锁定我的用户界面。
您真的需要所有这些睡眠吗?以这种波特率阅读,我认为您的串行端口输入缓冲区会很快溢出。 可能值得花时间来看看它。
作为一种完全不同的方法,为什么不使用MAVlink生成器来生成可以使用的库。 这样,您可以避免解析消息,对消息进行错误检查以及所有其他麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.