0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MAVLink学习之路03 _XML中定义MSG并生成C代码

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-07 16:46 次阅读

1写在前面

如果你前面两篇文章掌握了,说明你已经入门了。本文带你掌握如何在XML文件中定义Message(MSG消息)并生成C代码。

本文主要内容:

如何在XML文件中定义Message(消息)

如何通过生成器工具生成MAVLink C代码

提示:本文将结合上一篇文章提供下载的“MAVlink代码生成工具包”来讲述。

为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,本文章收录于【MAVLink学习之路】,在微信公众号回复【MAVLink学习之路】即可查看。

2

XML文件中定义MSG

2.1 关于MSG

MAVLink的MSG消息定义在XML文件中,通过生成器工具(Mavenerate或Mavgen)生成MAVLink C代码;

在MAVLink协议中,每一条MSG消息都具有一个ID,且ID具有唯一性。MSG消息ID其实就是对应协议格式中msgid,如下图:

简单来说:在xml中定义一条Message消息,通过生成器工具就能生成该Message对应的C代码(一条Message也可以理解成一条通信命令)。

提示:

在MAVLink V1版本中,消息ID有效数字的范围为0到255。

其中0到149为公共消息ID(飞控系统共有消息,一般不建议用于自定义)。而150到240为用于自定义消息的ID范围。

比如,打开前面下载的工具包消息定义的文件夹(如下图),可以看到:common.xml文件主要是一些公共消息ID范围为:0到149。而其它xml文件是针对不同系统定义的消息,主要集中在150到240之间。

2.2 MSG的定义方法

MAVLink的MSG消息定义在XML文件中,所以遵循XML语法规则。语法很简单(只需要记住部分常用的就行),我们可以参考MAVLink定义好的xml文件。

解压上一篇文章下载“MAVlink代码生成工具包”,打开(路径MAVLink message_definitions v1.0下)common.xml文件,我们以“心跳”为例:

从上图可以看出:“心跳”消息包含:消息ID、描述(注释)以及各项参数(可以理解为一个函数,及函数的参数)。

1.标签

每条消息都被定义在这样一个消息标签内。

2.id=“0”

表示此消息的id或index编号为0。

3.name=“HEARTBEAT”

该ID编号对应的名称。

4.

对该消息的描述,是一个非常重要,但可选的领域(意思是可以不用定义),可以理解为代码的注释。

5.

对消息的一个字段进行定义,它类似于C语言中的一个变量,可以是8,16,32和64位长度(有符号或无符号),以及浮点类型等。

6.type=“uint8_t”

将此字段定义为8位无符号整数。数组的定义如下:type=“uint8_t[5]”。可以理解为一个函数参数的数据类型。

7.name = “type”

该字段的名称,可以理解为一个函数参数的名称。

8.Type of the MAV

字段说明,可以理解为函数参数的注释。

上面文字描述可能理解起来比较困难,看下图心跳消息对应生成的C代码:

以上举例,只是提供其中一个函数接口,其实还会生成更多与该消息相关的接口、结构体等。

2.3 enum的定义方法

上面2.2节在xml中定义消息明白了,这节enum(枚举)的定义就很容易理解了,原理一样。

枚举和消息只是内容有所差异,定义原理都类似。枚举包含:枚举名称,成员(元素)名称,成员值等。

枚举的定义就不详细描述出来,提供枚举xml定义和生成C代码,相信你一看就能明白。

xml中定义的MAV_AUTOPILOT:

生成的C代码:

提示:

关于消息定义,更多的内容可以参看:

http://qgroundcontrol.org/mavlink/create_new_mavlink_message

3

通过生成器工具生成MAVLink C代码

上面第二章节在xml文件中定义好了MSG消息和enum枚举,那么,就需要通过生成器工具生成我们最终需要的代码(我主要讲述生成C代码)。

MAVLink项目提供有生成器有两种:Mavgenerate(GUI)和Mavgen(命令行);

使用生成器工具前提需要搭建好环境,请参考:MAVLink学习之路02_工具下载、环境搭建

3.1 Mavgenerate生成C代码

这个工具使用方法很简单,环境搭建好之后,解压下载工具包,在当前路径下输入命令“python mavgenerate.py”,或者双击mavgenerate.py即可打开:

3.2 Mavgen生成C代码

Mavgen生成器是一个通过命令实现的工具,命令很简单,比如:python -m pymavlink.tools.mavgen --lang=C --wire-protocol=1.0 --output=generated/include/mavlink/v1.0 message_definitions/v1.0/common.xml 命令的具体描述请看下图:

3.3 关于生成器几点提示

1.Mavgen支持的语言及版本

2.路径

因为命令行生成器支持相对路径,建议将xml文件拷贝到如下路径:MAVLinkmessage_definitionsv1.0

3.命令语法和选项说明

初学者不用深入理解,只需要知道如何生成C代码即可(参考我上面提供的哪一条命令)。

关于生成器工具更多的内容可以参考:

https://mavlink.io/en/getting_started/generate_libraries.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 生成器
    +关注

    关注

    7

    文章

    302

    浏览量

    20242
  • C代码
    +关注

    关注

    1

    文章

    89

    浏览量

    14177
  • mavlink
    +关注

    关注

    0

    文章

    8

    浏览量

    2563
收藏 人收藏

    评论

    相关推荐

    Simulink自动生成代码现阶段的学习笔记

    在车载控制器的软件开发中,simulink的身影几乎随处可见,主要是在控制算法和控制逻辑的实现。平时看同事点点点就生成代码了,看起来很简单,但是实际操作起来确各种磕磕绊绊。 下面记录了一下步骤作为现阶段的学习笔记吧。
    的头像 发表于 04-17 10:56 217次阅读
    Simulink自动<b class='flag-5'>生成</b><b class='flag-5'>代码</b>现阶段的<b class='flag-5'>学习</b>笔记

    ST-MotorControl生成keil代码,在cubemx没有任何改动,代码也没有改动是怎么回事?

    大家好。 我使用ST的motor workbench,配置好项目参数后,生成keil代码。在cubemx没有任何改动,代码也没有改动。 然后编译的时候报错。说是有些变量和宏
    发表于 04-10 07:06

    MAVLink在应用编程中的编程原理和思路

    嵌入式开发过程中,UART、 CAN、 USB等通信基本离不开通信协议。 下面给大家分享一种通信协议(MAVLink)在应用编程中的编程原理和思路。
    发表于 03-08 12:45 269次阅读
    <b class='flag-5'>MAVLink</b>在应用编程中的编程原理和思路

    XML在HarmonyOS中的生成,解析与转换(下)

    一、XML 解析 对于以 XML 作为载体传递的数据,实际使用中需要对相关的节点进行解析,一般包括解析 XML 标签和标签值、解析 XML 属性和属性值、解析
    的头像 发表于 02-18 10:07 450次阅读

    XML 在 HarmonyOS 中的生成,解析与转换(上)

    一、XML 概述 XML(可扩展标记语言)是一种用于描述数据的标记语言,旨在提供一种通用的方式来传输和存储数据,特别是 Web 应用程序中经常使用的数据。XML 并不预定义标记。因此,
    的头像 发表于 02-18 09:35 431次阅读

    基于 TouchGFX 生成代码中添加触摸功能的方法

    基于 TouchGFX 生成代码中添加触摸功能的方法
    的头像 发表于 10-27 09:21 573次阅读
    基于 TouchGFX <b class='flag-5'>生成</b>的<b class='flag-5'>代码</b>中添加触摸功能的方法

    【中秋国庆不断更】XML在HarmonyOS生成,解析与转换(上)

    一、XML概述 XML(可扩展标记语言)是一种用于描述数据的标记语言,旨在提供一种通用的方式来传输和存储数据,特别是Web应用程序中经常使用的数据。XML并不预定义标记。因此,
    发表于 09-27 15:21

    敏矽微电子Cortex-M0学习笔记03——时钟系统设计例程

    敏矽微电子Cortex-M0学习笔记03——时钟系统设计例程
    的头像 发表于 09-26 17:06 492次阅读
    敏矽微电子Cortex-M0<b class='flag-5'>学习</b>笔记<b class='flag-5'>03</b>——时钟系统设计例程

    如何一键生成mybatisplus

    Mybatis代码生成器相信大家用过,本篇博客我们来介绍如何一键生成mybatisplus 的相关Entity、Mapper、Mapper XML、Service、Controller
    的头像 发表于 09-25 14:23 393次阅读
    如何一键<b class='flag-5'>生成</b>mybatisplus

    开发者福利!一文入门亚马逊云科技基于机器学习代码生成器Amazon CodeWhisperer

    Amazon CodeWhisperer介绍 Amazon CodeWhisperer是亚马逊云科技出品的一款基于机器学习的通用代码生成器,可实时提供代码建议。类似Cursor和Git
    的头像 发表于 09-18 14:22 618次阅读
    开发者福利!一文入门亚马逊云科技基于机器<b class='flag-5'>学习</b>的<b class='flag-5'>代码</b><b class='flag-5'>生成</b>器Amazon CodeWhisperer

    NICE自定义指令如何被编译生成汇编文件和.verilog二进制文件?

    学习官方的demo_nice例程时,使用了 NICE Instruction的自定义指令,但是不太理解自己在.c文件定义的指令是如何被编
    发表于 08-16 06:46

    MSG300D三轴微陀螺详细参数

    MSG300D 三轴微陀螺 MSG300D微陀螺芯片外形尺寸小( 6×6×1.9mm³ )、重量轻,采用单芯片三轴集成的形式,提高了产品的集成度。
    的头像 发表于 07-24 10:33 520次阅读
    <b class='flag-5'>MSG</b>300D三轴微陀螺详细参数

    MBD的Simulink使用技巧:详解代码生成中的模型与代码(2)

    上一篇文章中提到,生成嵌入式代码,必须选择定步长求解器。实际中,生成嵌入式代码几乎不会使用Simulink模型库中的连续模型,往往需要通过最简单的离散模块来实现算法模型。
    的头像 发表于 07-13 15:13 2991次阅读
    MBD的Simulink使用技巧:详解<b class='flag-5'>代码</b><b class='flag-5'>生成</b>中的模型与<b class='flag-5'>代码</b>(2)

    加载xml文件导致崩溃的原因?怎么解决?

    也许发布的部分有误,我还是试了一下。 (对不起我的英语,我是......法语) 所以我在加载由 php 脚本生成xml 文件时确实遇到了问题。一切运行良好,直到我尝试
    发表于 06-06 06:59

    将ProjectInfo.xml导入S32 Design Studio for ARM IDE时构建失败怎么处理?

    启用了“生成 S32 设计工作室 ProjectInfo.xml 文件”... 要导入项目,我执行以下操作... 1. 选择“文件 -&gt; 导入...”选择
    发表于 05-25 06:03