Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1723835
  • 博文数量: 98
  • 博客积分: 667
  • 博客等级: 上士
  • 技术积分: 1631
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-27 15:59
个人简介

一沙一世界 一树一菩提

文章分类

全部博文(98)

文章存档

2021年(8)

2020年(16)

2019年(8)

2017年(1)

2016年(11)

2015年(17)

2014年(9)

2013年(4)

2012年(19)

2011年(1)

2009年(4)

分类: 嵌入式

2019-12-25 23:22:58

### 2017-5-12 px4的mavlink,这是很久以前的笔记,留于此作为记录。
mavlink找到两个函数就可以了解整体框架:
1 MavlinkReceiver类的receive_thread函数,这个函数用于接收mavlink消息包。这个线程采用while+poll结构获得字节流,然后解析,满足mavlink包条件,对收到的包进行处理,调用2个handle_message。
2 Mavlink类的task_main中的stream->update函数,这个用于发送mavlink消息包。这个update对配置的每个steam执行send处理。具体的方式是通过一个StreamListItem指针数组,取出每个stream,然后调用Mavlink_stream的send函数,实际上是调用每个Mavlink_stream的子类的send函数,在send函数里,调用由xml文件自动生成的mavlink封装发送函数。这里体现了c++的继承和封装(不知道这话说的对不对)而自己的mavlink消息只要在xml文件添加或者修改即可。编译px4固件时,各个消息包的自动封装函数和解析函数就都有了。
1  px4的mavlink首先是在mavlink_main.cpp文件中。每个mavlink例程都是通过start_helper函数new新建启动的。然后运行每个例程中的task_main启动主循环。
在这个函数进入循环以前,新建一个接受处理线程receive_thread,receive做什么,接收函数最后落实到干活函数就是recrive_thread函数。这个函数是典型的while+poll通信工作模式。这个函数主要是通过udp或uart接收byte,然后解析,满足mavlink协议的数据包进行处理,建议这部分具体的mavlink_parse_char函数,通信解析处理的典型方式,基本就是switch-case模式。然后2个接收处理函数:
handle_message;这个是主要处理一般的mavlink命令,有需要立刻回复的就直接回复,有需要设立标志的就设立标志。然后在mavlink中根据标志进行发送处理。
_mavlink->handle_message;//这个是mavlink层处理的mavlink信息,包括任务相关的messange(_mission_manager),参数相关的message(_parameters_manager),ftp相关的message(_mavlink_ftp),(这部分我没有看),日志message相关的(_mavlink_log_handler),最后是mavlink消息转发相关的。(这部分也没看)有了发送函数,看mavlink类task_main函数,在这个函数最下端,有这样的语句:
LL_FOREACH(_streams, stream){stream->update(t);}.这里会逐一调用每个stream的send函数把mavlink信息包发出去。这样mavlink就有来有去,活动起来了。
具体处理过程都干些什么,自己慢慢梳理,挺有意思的。
阅读(1864) | 评论(0) | 转发(0) |
0

上一篇:汇编认识

下一篇:px4 commander阅读笔记

给主人留下些什么吧!~~