/ / leer desde el puerto serie usando el protocolo mavlink con qt c ++ - c ++, multiproceso, qt, puerto serie, arduino

leer desde el puerto serie utilizando el protocolo mavlink con qt c ++ - c ++, multiproceso, qt, puerto serie, arduino

Estoy intentando leer de ardupilot que utilizando el protocolo mavlink para enviar datos. Si visita este sitio:

http://qgroundcontrol.org/mavlink/start

Usted puede encontrar cómo funciona el protocolo mavlink y quéEstoy tratando de hacer. En la parte inferior del sitio se puede ver la disposición de bytes del encabezado. Escribí algo de código y funciona correctamente, pero después de ejecutarse durante un tiempo de ejecución aparece un error. Por lo que sé, estos errores se refieren a las asignaciones de memoria, pero no puedo encontrar dónde asigno la memoria de forma ilegal.

Aquí está mi código de hilo lector:

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

Estoy usando qt5 con ubuntu 14.04 y debo mencionar que estoy leyendo datos con 115200baud y que debo administrar con subprocesos. Si no lo hago, bloquearé mi interfaz de usuario.

Respuestas

0 para la respuesta № 1

¿Realmente necesita todos esos mssue ... Leyendo a esa velocidad de transmisión? Yo pensaría que el búfer de entrada del puerto serie se desbordaría con bastante rapidez. Podría valer la pena el tiempo para echarle un vistazo.

Como un enfoque completamente diferente, ¿por qué no usar el Generador MAVlink para generar una biblioteca que puedas usar. De esta manera, le ahorrará la molestia de analizar los mensajes y verificar los errores y todo eso ...