1写在前面
《mavlink学习之路》前面三篇文章,可以说是一些基础知识,也是为本文做的准备工作(建议初学者先了解前面三篇文章)。
本文主要内容:
mavlink移植主要步骤
mavlink移植过程要点
提示:为方便广大初学者朋友尽快掌握mavlink,我在文末提供mavlink发送接收例程(基于stm32硬件、mdk-arm和ewarm开发环境)。
为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,本文章收录于【mavlink学习之路】,在微信公众号回复【mavlink学习之路】即可查看。
2
mavlink移植主要步骤
2.1 移植说明
本文主要针对mavlink c源代码移植进行讲述。其中,mavlink的c源代码可以下载网上预生成的c源代码库,也可以通过生成器工具生成。
a.下载预生成c代码库
如果是使用标准mavlink的msg消息,则可以现在官方指定地址预先生成的c代码库。预先生成c代码库总共两个版本:
mavlink v1版:
https://github.com/mavlink/c_library_v1
mavlink v2版:
https://github.com/mavlink/c_library_v1
(提示:公众号不支持外链接,请复制链接到浏览器打开)
b.生成器生成c代码
如果你需要自定义msg消息,则需要自己通过工具生成c代码,具体生成方法请参看文章:《mavlink学习之路03_xml中定义msg并生成c代码》
提示:
官方预生成c代码库就是通过生成器而生成的,官方提供的生成器工具、预生成c代码库不定期更新。
也就是说可能你不同时期看到的预生成库不同,不同时期的生成器及其生成的代码也有所不同。
如上图,官方预生成的c代码(v1版),与通过生成器生成的代码完全一样。如common.xml通过生成器生成的c代码就和上面紫红色框出来的代码一样。当然,生成器版本也是这最新的才对。
2.2 移植主要步骤
1.下载相关工具
2.环境搭建
3.生成c代码(如果下载官方预生成代码,前面两步可以不用)
4.将c代码添加到工程
5.配置(如添加mavlink路径、修改代码适配工程)
6.添加mavlink发送接收(及应用)代码
步骤1, 2, 3已经在前面文章详细讲述了,本文主要讲述步骤4, 5。步骤6下一篇文章详细讲述。
3
mavlink移植过程要点
本节主要内容讲述将c代码添加到工程,然后配置,到编译没有错误这一过程中的一些重要知识点。
3.1 代码添加到工程
代码添加到工程其实很简单,将代码拷贝工程文件下,类似如下图,添加组,添加源文件。
但是,mavlink源代码都是.h头文件,可以不用像上面那样添加到工程。当然,添加头文件到工程的好处就是可以快速打开头文件,查找相关代码。
说这一小节是想提示大家:mavlink的c源代码都是.h头文件。头文件只需要添加对应路径,包含头文件即可(#include mavlink.h)。
3.2 配置
1.添加路径
keil mdk-arm和iar ewarm添加路径这项内容我就不在这里详细讲述了,不会的朋友可以参看看我的文章:
keil mdk-arm系列教程(一)_新建软件工程详细过程
iar ewarm系列教程(一)_新建软件工程详细过程
3.3 修改代码
这小节内容可以参看网上一篇博文:
https://www.cnblogs.com/lovechen/p/5809709.html
那篇文章讲述的很多,我讲一下重点:它修改的代码是针对老版本主要需要修改两个地方。
而且新版本mavlink生成器已经优化了一个项,也就是只有一个地方需要修改:修改mavlink_types.h.
1.针对keil mdk-arm
2.针对iar ewarm
替换代码:#define mavpacked( __declaration__ ) __declaration__
那篇文章针对的是老版mavlink还需要修改一个const的地方,我这里就不说了(新来的建议用新版的)。
为什么这里要修改呢?
原因在于编译器的差异导致的。
3.4 补充知识点
1.#pragma anon_unions
keil中默认是不支持匿名结构体的,需要编译指令#pragma anon_unions指名。
2.mavpacked
如果不修改代码,直接编译,发现有许多错误,原因都来自mavpacked。结合修改的内容,再看下图,有什么启发没有。
4
源代码下载
地址:
https://pan.baidu.com/s/1xraeranml-bn9cmwe6aq-a
密码:cusq
细数AGV的几种导航方式
谷歌发布发布其安全人工智能框架
不止是5G技术,AI和Wi-Fi6也将推动家庭网络革命
GeForce 445.75版显卡驱动发布 可第一时间体验DLSS 2.0游戏的快感
基于小样本增量学习 NER 的框架
MAVLink学习之路04_MAVLink移植到STM32具体步骤
过零比较器电路的用途_过零比较器原理介绍
构建一个计时器电路的教程
HarmonyOS折叠屏设计规范的新增亮点内容
到2025年全球传感器市场复合年增长率为8.86%,将进一步创造市场竞争
vivo Z5i正式开售搭载了骁龙675处理器和5000mAh超大电池
安装手机信号屏蔽器需要注意什么
台积电正为华为生产目前最先进的5nm工艺制程的麒麟9000芯片?
智能起重机发展应用
怎样把电动车锂电池改造成手电
互联网电视新收视形态广受欢迎,互联网电视大屏终端市场发展迅速
放大器的工作参数可以略微高于绝对最大额定值吗
2018年,人脸识别领域有哪些值得关注的企业呢?
AI如何一步步构建和影响身边的世界
来自日本的陶瓷,小米MIX皓月白强势登场