修正程序后出现一个bug,表现为程序启动后卡死,目前还没找到原因

This commit is contained in:
hm
2020-03-17 22:08:29 +08:00
parent 72a4ae2568
commit 3555b4ad94
6 changed files with 46 additions and 37 deletions
+1
View File
@@ -192,6 +192,7 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram)
{
if(MAVLINK_FRAMING_OK == mavlink_parse_char(src,*i,&msg,&status))
{
emit recievemsg(msg); //将信息广播出去
MAVLinkRcv_Handler(msg); //接收完一帧数据并处理
}
else
+3
View File
@@ -80,6 +80,9 @@ public:
MissionProcess *Mission;
signals:
void recievemsg(mavlink_message_t msg);
void state_updated();
void parameter_updated();
//void mission_updated();
+32 -27
View File
@@ -1,9 +1,5 @@
#include "missionprocess.h"
void SendMessageTo(uint8_t ch, uint8_t *data,uint16_t len)
{
qDebug() << "data to send is:" << ch << data << len;
}
MissionProcess::MissionProcess(QObject *parent) : QObject(parent)
{
@@ -82,7 +78,7 @@ void MissionProcess::SendMessage(mavlink_message_t msg)
{
uint8_t buff[256+20];
uint16_t len = mavlink_msg_to_send_buffer(buff, &msg);
SendMessageTo(0,buff, len);//使用信号和槽
emit SendMessageTo(0,buff, len);//使用信号和槽
}
@@ -116,10 +112,11 @@ void MissionProcess::MissionParse(mavlink_message_t msg)
}break;
case MAVLINK_MSG_ID_MISSION_ITEM_INT: {
mavlink_msg_mission_item_int_decode(&msg,&mission_item_int);
isWaitingforItem = true;
isWaitingforItem = false;
}break;
case MAVLINK_MSG_ID_MISSION_ITEM: {
mavlink_msg_mission_item_decode(&msg,&mission_item);
isWaitingforItem = false;
}break;
case MAVLINK_MSG_ID_MISSION_ACK: {
mavlink_msg_mission_ack_decode(&msg,&mission_ack);
@@ -247,6 +244,7 @@ void MissionProcess::WriteStateMachine(void)
if(step == 0)
{
//向其他线程或者自己读取航点的数量
count(20);//发送count
time = QTime::currentTime().msecsSinceStartOfDay();
step++;//下一个阶段
@@ -256,7 +254,7 @@ void MissionProcess::WriteStateMachine(void)
//如果超时,那么重新发一次指令
if((QTime::currentTime().msecsSinceStartOfDay() - time) > 1000)
{
step = 0;
step = 0;//返回上一个阶段
timeout_count ++;
if(timeout_count > 5)//如果指令发5次还没发出去,那么结束读取,并报错
{
@@ -267,39 +265,46 @@ void MissionProcess::WriteStateMachine(void)
}
else//如果没有超时,那么就进入下一个阶段
{
if(isRecieveRequest == true)//收到Request
{
timeout_count = 0;
if(isRecieveRequest == true)
{
step ++;
}
}
}
}
else if(step ==3)//发送航点
else if(step == 3)
{
if(isWaitingforItem == false)
if((QTime::currentTime().msecsSinceStartOfDay() - time) > 1000)
{
//分成两类,int和不带int
if(mission_item_int.seq < mission_count.count)
{
//item_int(mission_item_int.seq+1);//发送航点
//开启定时器
isWaitingforItem = true;
}
else
{
step++;
}
step = 3;//返回上一个阶段
timeout_count ++;
if(timeout_count > 5)//如果指令发5次还没发出去,那么结束读取,并报错
{
step = 0;
m_TransmitMode = 0;
timeout_count = 0;
}
}
else
{
//check issended and timeout
if(isRecieveRequest == true)//收到Request
{
//分成两类,int和不带int
if(mission_item_int.seq < mission_count.count)
{
//item_int(mission_item_int.seq+1);//发送航点
isRecieveRequest = false;
}
else
{
step++;
}
}
}
}
else if(step == 4)//航线传输结束,等待ack,如果没接收到就算了,超时也结束
{
//ack();
//ack();//wait for ack
step = 0;
isReadMission = false;
isRecieveCount = false;
+2 -7
View File
@@ -80,7 +80,7 @@ private slots:
signals:
void readError();
void SendMessageTo(uint8_t ch, uint8_t *data,uint16_t len);
private:
@@ -127,12 +127,7 @@ private:
};
#ifdef QtMavlinkNode
#include <mavlinknodeglobal.h>
void MAVLINKNODESHARED_EXPORT SendMessageTo(uint8_t ch, uint8_t *data,uint16_t len);
#else
void SendMessageTo(uint8_t ch, uint8_t *data,uint16_t len);
#endif
+6 -1
View File
@@ -10,6 +10,8 @@ DLink::DLink(QObject *parent) : QObject(parent)
qDebug() << "Dlink " << QThread::currentThreadId();
mavlinknode = new MavLinkNode(this);
// connect(mavlinknode->Mission,SIGNAL(SendMessageTo(uint8_t,uint8_t*,uint16_t)),
// this,SLOT(SendMessageTo(uint8_t,uint8_t*,uint16_t)));
}
DLink::~DLink()
{
@@ -18,7 +20,7 @@ DLink::~DLink()
}
int DLink::SendMessageTo(uint8_t, uint8_t *msg, uint16_t len)
int DLink::SendMessageTo(uint8_t ch, uint8_t *msg, uint16_t len)
{
if (DLink::Clientsock)
{
@@ -58,6 +60,9 @@ void DLink::setupPort(const QString port, qint32 baudrate, QSerialPort::Parity p
mavlinknode->start();
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readPendingDatagramsSerialPort()));
qDebug() << "Serial Port Open Success";
}
else
+2 -2
View File
@@ -36,7 +36,7 @@ public:
int SendMessageTo(uint8_t, uint8_t *msg, uint16_t len);
MavLinkNode *mavlinknode = nullptr;
@@ -51,7 +51,7 @@ public slots:
void readPendingDatagramsClient(void);
int SendMessageTo(uint8_t ch, uint8_t *msg, uint16_t len);
protected: