0. 前言
根据SITL的断点调试和自己阅读代码的一些理解,写一点自己的注释,有什么不恰当的地方请各位读者不吝赐教。
1. GCS::update_send 线程
主动向MavLink system发送消息包。
1.1 不断向地面站发送飞机状态数据
msg_attitude:
msg_location:
next 和 do_try_send_message(next) 是关键,F11进去就可以看到针对每个massage的Switch…case。
消息存在next_deferred_bucket_message_to_send中。
1.2 发送心跳包
消息存在deferred_message中。
2. GCS::update_receive线程
接收MavLink消息,接收后处理。接收并回应(发送回应包如COMMAND_ACK消息)。
从串口buffer中读取字节并将每个字节decode成MavLink消息:
mavlink_frame_char_buffer(channel_buffer(), channel_status(), c, &msg, &status)
处理该MavLink消息(及时处理):
packetReceived(status, msg);