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

    文章

    315

    浏览量

    21002
  • C代码
    +关注

    关注

    1

    文章

    89

    浏览量

    14297
  • mavlink
    +关注

    关注

    0

    文章

    8

    浏览量

    2594
收藏 人收藏

    评论

    相关推荐

    如何自动生成verilog代码

    介绍几种自动生成verilog代码的方法。
    的头像 发表于 11-05 11:45 284次阅读
    如何自动<b class='flag-5'>生成</b>verilog<b class='flag-5'>代码</b>

    代码解析工具与自动化流程图生成解决方案

      摘要:CasePlayer2是一款强大的源代码解析工具,专门设计用于分析ANSI CCC++以及汇编语言源代码
    的头像 发表于 10-10 13:40 203次阅读

    生成式AI的定义和特征

    行为,生成全新的、具有实际意义的数据或内容。这种技术已经在自然语言处理、图像生成、音频合成等多个领域展现出巨大的潜力和应用价值。本文将详细探讨生成式AI的定义、特征类,
    的头像 发表于 07-05 17:33 988次阅读

    workbench生成代码出现fatal error stm32cubemx5.2.0.analyticsserver.xml:1:1:premature end of file什么原因?

    st workbench生成代码出现fatal error stm32cubemx5.2.0.analyticsserver.xml:1:1:premature end of file什么原因
    发表于 07-03 08:14

    探讨AI编写代码技术,以及提高代码质量的关键:静态代码分析工具Perforce Helix QAC &amp; Klocwork

    的过程,并回答这个问题: AI会取代程序员吗? 什么是AI代码生成? 近年来,生成式AI的应用呈爆炸式增长,这主要因为现在有足够的计算能力来运行深度学习算法,而且训练机器
    的头像 发表于 06-05 14:10 395次阅读

    OpenHarmony语言基础类库【@ohos.xml (xml解析与生成)】

    XML文本转换为JavaScript对象、以及XML文件生成和解析的一系列接口。
    的头像 发表于 05-08 17:05 846次阅读

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

    在车载控制器的软件开发,simulink的身影几乎随处可见,主要是在控制算法和控制逻辑的实现。平时看同事点点点就生成代码了,看起来很简单,但是实际操作起来确各种磕磕绊绊。 下面记录了一下步骤作为现阶段的
    的头像 发表于 04-17 10:56 3858次阅读
    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 885次阅读
    <b class='flag-5'>MAVLink</b>在应用编程<b class='flag-5'>中</b>的编程原理和思路

    【JAVA UI】【HarmonyOS】【Demo】 鸿蒙如何进行 xml 解析

    xml 文件,代码如下 George John Reminder Don't forget the meeting! 1.2 新建 class model 代码如下 package com.harmony.alliance.m
    的头像 发表于 02-19 15:59 566次阅读
    【JAVA UI】【HarmonyOS】【Demo】 鸿蒙如何进行 <b class='flag-5'>xml</b> 解析

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

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

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

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

    鸿蒙OS开发-(用xml写查询语句+xml使用)

    C#我们常用来当做一个小型的数据库来使用,我们可以将信息保存在XML文档,或者从XML文档
    的头像 发表于 01-26 17:51 645次阅读

    项目工程下载与XML配置文件下载:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十)

    正运动XML文件生成ZML文件添加步骤。
    的头像 发表于 01-22 10:08 544次阅读
    项目工程下载与<b class='flag-5'>XML</b>配置文件下载:EtherCAT超高速实时运动控制卡XPCIE1032H上位机<b class='flag-5'>C</b>#开发(十)

    单片机代码自动生成器程序

    单片机代码自动生成器是一种能够帮助开发人员快速生成单片机代码的工具。它利用了现代计算机技术和算法,能够根据用户提供的输入和需求,自动生成符合
    的头像 发表于 01-08 14:12 3157次阅读