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

    文章

    313

    浏览量

    20966
  • C代码
    +关注

    关注

    1

    文章

    89

    浏览量

    14277
  • mavlink
    +关注

    关注

    0

    文章

    8

    浏览量

    2584
收藏 人收藏

    评论

    相关推荐

    如何自动生成verilog代码

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

    生成式AI的定义和特征

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

    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 361次阅读

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

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

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

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

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

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

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

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

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

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

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

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

    oracle sql 定义变量赋值

    在Oracle SQL,变量是用来存储数据值的标识符。通过定义和使用变量,我们可以在SQL语句中使用它们来存储和处理数据,从而实现更灵活和动态的查询和操作。 在Oracle SQL定义
    的头像 发表于 12-06 10:46 2618次阅读

    Altova--VERSION 2024的AI集成和PDF数据映射

    XMLSpy的AI集成可根据自然语言提示生成架构、实例文档和示例数据,从而立即提高XML和JSON开发任务的工作效率。AIAssistant 还可以生成XSL、XPath和XQuer
    的头像 发表于 11-29 15:53 598次阅读
    Altova--VERSION 2024<b class='flag-5'>中</b>的AI集成和PDF数据映射

    从HumanEval到CoderEval: 你的代码生成模型真的work吗?

    项目中的选取了代码生成任务来构建CoderEval,根据对外部依赖的程度为标准将这些任务分为6个等级、根据生成的目标分为3类生成任务,以更
    的头像 发表于 11-25 15:55 1605次阅读
    从HumanEval到CoderEval: 你的<b class='flag-5'>代码</b><b class='flag-5'>生成</b>模型真的work吗?