0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MAVLink學(xué)習(xí)之路03 _XML中定義MSG并生成C代碼

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-03-07 16:46 ? 次閱讀

1寫在前面

如果你前面兩篇文章掌握了,說明你已經(jīng)入門了。本文帶你掌握如何在XML文件中定義Message(MSG消息)并生成C代碼。

本文主要內(nèi)容:

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

如何通過生成器工具生成MAVLink C代碼

提示:本文將結(jié)合上一篇文章提供下載的“MAVlink代碼生成工具包”來講述。

為了方便大家平時公交、地鐵、外出辦事也能用手機(jī)隨時隨地查看該教程,本文章收錄于【MAVLink學(xué)習(xí)之路】,在微信公眾號回復(fù)【MAVLink學(xué)習(xí)之路】即可查看。

2

XML文件中定義MSG

2.1 關(guān)于MSG

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

在MAVLink協(xié)議中,每一條MSG消息都具有一個ID,且ID具有唯一性。MSG消息ID其實就是對應(yīng)協(xié)議格式中msgid,如下圖:

簡單來說:在xml中定義一條Message消息,通過生成器工具就能生成該Message對應(yīng)的C代碼(一條Message也可以理解成一條通信命令)。

提示:

在MAVLink V1版本中,消息ID有效數(shù)字的范圍為0到255。

其中0到149為公共消息ID(飛控系統(tǒng)共有消息,一般不建議用于自定義)。而150到240為用于自定義消息的ID范圍。

比如,打開前面下載的工具包消息定義的文件夾(如下圖),可以看到:common.xml文件主要是一些公共消息ID范圍為:0到149。而其它xml文件是針對不同系統(tǒng)定義的消息,主要集中在150到240之間。

2.2 MSG的定義方法

MAVLink的MSG消息定義在XML文件中,所以遵循XML語法規(guī)則。語法很簡單(只需要記住部分常用的就行),我們可以參考MAVLink定義好的xml文件。

解壓上一篇文章下載“MAVlink代碼生成工具包”,打開(路徑MAVLink message_definitions v1.0下)common.xml文件,我們以“心跳”為例:

從上圖可以看出:“心跳”消息包含:消息ID、描述(注釋)以及各項參數(shù)(可以理解為一個函數(shù),及函數(shù)的參數(shù))。

1.標(biāo)簽

每條消息都被定義在這樣一個消息標(biāo)簽內(nèi)。

2.id=“0”

表示此消息的id或index編號為0。

3.name=“HEARTBEAT”

該ID編號對應(yīng)的名稱。

4.

對該消息的描述,是一個非常重要,但可選的領(lǐng)域(意思是可以不用定義),可以理解為代碼的注釋。

5.

對消息的一個字段進(jìn)行定義,它類似于C語言中的一個變量,可以是8,16,32和64位長度(有符號或無符號),以及浮點(diǎn)類型等。

6.type=“uint8_t”

將此字段定義為8位無符號整數(shù)。數(shù)組的定義如下:type=“uint8_t[5]”??梢岳斫鉃橐粋€函數(shù)參數(shù)的數(shù)據(jù)類型。

7.name = “type”

該字段的名稱,可以理解為一個函數(shù)參數(shù)的名稱。

8.Type of the MAV

字段說明,可以理解為函數(shù)參數(shù)的注釋。

上面文字描述可能理解起來比較困難,看下圖心跳消息對應(yīng)生成的C代碼:

以上舉例,只是提供其中一個函數(shù)接口,其實還會生成更多與該消息相關(guān)的接口、結(jié)構(gòu)體等。

2.3 enum的定義方法

上面2.2節(jié)在xml中定義消息明白了,這節(jié)enum(枚舉)的定義就很容易理解了,原理一樣。

枚舉和消息只是內(nèi)容有所差異,定義原理都類似。枚舉包含:枚舉名稱,成員(元素)名稱,成員值等。

枚舉的定義就不詳細(xì)描述出來,提供枚舉xml定義和生成C代碼,相信你一看就能明白。

xml中定義的MAV_AUTOPILOT:

生成的C代碼:

提示:

關(guān)于消息定義,更多的內(nèi)容可以參看:

http://qgroundcontrol.org/mavlink/create_new_mavlink_message

3

通過生成器工具生成MAVLink C代碼

上面第二章節(jié)在xml文件中定義好了MSG消息和enum枚舉,那么,就需要通過生成器工具生成我們最終需要的代碼(我主要講述生成C代碼)。

MAVLink項目提供有生成器有兩種:Mavgenerate(GUI)和Mavgen(命令行);

使用生成器工具前提需要搭建好環(huán)境,請參考:MAVLink學(xué)習(xí)之路02_工具下載、環(huán)境搭建

3.1 Mavgenerate生成C代碼

這個工具使用方法很簡單,環(huán)境搭建好之后,解壓下載工具包,在當(dāng)前路徑下輸入命令“python mavgenerate.py”,或者雙擊mavgenerate.py即可打開:

3.2 Mavgen生成C代碼

Mavgen生成器是一個通過命令實現(xiàn)的工具,命令很簡單,比如: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 關(guān)于生成器幾點(diǎn)提示

1.Mavgen支持的語言及版本

2.路徑

因為命令行生成器支持相對路徑,建議將xml文件拷貝到如下路徑:MAVLinkmessage_definitionsv1.0

3.命令語法和選項說明

初學(xué)者不用深入理解,只需要知道如何生成C代碼即可(參考我上面提供的哪一條命令)。

關(guān)于生成器工具更多的內(nèi)容可以參考:

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    313

    瀏覽量

    20844
  • C代碼
    +關(guān)注

    關(guān)注

    1

    文章

    89

    瀏覽量

    14237
  • mavlink
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    2578
收藏 人收藏

    評論

    相關(guān)推薦

    生成式AI的定義和特征

    行為,生成全新的、具有實際意義的數(shù)據(jù)或內(nèi)容。這種技術(shù)已經(jīng)在自然語言處理、圖像生成、音頻合成等多個領(lǐng)域展現(xiàn)出巨大的潛力和應(yīng)用價值。本文將詳細(xì)探討生成式AI的定義、特征類,
    的頭像 發(fā)表于 07-05 17:33 ?557次閱讀

    workbench生成代碼出現(xiàn)fatal error stm32cubemx5.2.0.analyticsserver.xml:1:1:premature end of file什么原因?

    st workbench生成代碼出現(xiàn)fatal error stm32cubemx5.2.0.analyticsserver.xml:1:1:premature end of file什么原因
    發(fā)表于 07-03 08:14

    探討AI編寫代碼技術(shù),以及提高代碼質(zhì)量的關(guān)鍵:靜態(tài)代碼分析工具Perforce Helix QAC & Klocwork

    的過程,并回答這個問題: AI會取代程序員嗎? 什么是AI代碼生成? 近年來,生成式AI的應(yīng)用呈爆炸式增長,這主要因為現(xiàn)在有足夠的計算能力來運(yùn)行深度學(xué)習(xí)算法,而且訓(xùn)練機(jī)器
    的頭像 發(fā)表于 06-05 14:10 ?273次閱讀

    OpenHarmony語言基礎(chǔ)類庫【@ohos.xml (xml解析與生成)】

    XML文本轉(zhuǎn)換為JavaScript對象、以及XML文件生成和解析的一系列接口。
    的頭像 發(fā)表于 05-08 17:05 ?662次閱讀

    Simulink自動生成代碼現(xiàn)階段的學(xué)習(xí)筆記

    在車載控制器的軟件開發(fā),simulink的身影幾乎隨處可見,主要是在控制算法和控制邏輯的實現(xiàn)。平時看同事點(diǎn)點(diǎn)點(diǎn)就生成代碼了,看起來很簡單,但是實際操作起來確各種磕磕絆絆。 下面記錄了一下步驟作為現(xiàn)階段的
    的頭像 發(fā)表于 04-17 10:56 ?2663次閱讀
    Simulink自動<b class='flag-5'>生成</b><b class='flag-5'>代碼</b>現(xiàn)階段的<b class='flag-5'>學(xué)習(xí)</b>筆記

    MAVLink在應(yīng)用編程的編程原理和思路

    嵌入式開發(fā)過程,UART、 CAN、 USB等通信基本離不開通信協(xié)議。 下面給大家分享一種通信協(xié)議(MAVLink)在應(yīng)用編程的編程原理和思路。
    發(fā)表于 03-08 12:45 ?645次閱讀
    <b class='flag-5'>MAVLink</b>在應(yīng)用編程<b class='flag-5'>中</b>的編程原理和思路

    XML在HarmonyOS生成,解析與轉(zhuǎn)換(下)

    一、XML 解析 對于以 XML 作為載體傳遞的數(shù)據(jù),實際使用需要對相關(guān)的節(jié)點(diǎn)進(jìn)行解析,一般包括解析 XML 標(biāo)簽和標(biāo)簽值、解析 XML
    的頭像 發(fā)表于 02-18 10:07 ?609次閱讀

    XML 在 HarmonyOS 生成,解析與轉(zhuǎn)換(上)

    一、XML 概述 XML(可擴(kuò)展標(biāo)記語言)是一種用于描述數(shù)據(jù)的標(biāo)記語言,旨在提供一種通用的方式來傳輸和存儲數(shù)據(jù),特別是 Web 應(yīng)用程序中經(jīng)常使用的數(shù)據(jù)。XML 并不預(yù)定義標(biāo)記。因此,
    的頭像 發(fā)表于 02-18 09:35 ?572次閱讀

    鴻蒙OS開發(fā)-(用xml寫查詢語句+xml使用)

    C#我們常用來當(dāng)做一個小型的數(shù)據(jù)庫來使用,我們可以將信息保存在XML文檔,或者從XML文檔
    的頭像 發(fā)表于 01-26 17:51 ?557次閱讀

    oracle sql 定義變量賦值

    在Oracle SQL,變量是用來存儲數(shù)據(jù)值的標(biāo)識符。通過定義和使用變量,我們可以在SQL語句中使用它們來存儲和處理數(shù)據(jù),從而實現(xiàn)更靈活和動態(tài)的查詢和操作。 在Oracle SQL定義
    的頭像 發(fā)表于 12-06 10:46 ?2070次閱讀

    從HumanEval到CoderEval: 你的代碼生成模型真的work嗎?

    項目中的選取了代碼生成任務(wù)來構(gòu)建CoderEval,根據(jù)對外部依賴的程度為標(biāo)準(zhǔn)將這些任務(wù)分為6個等級、根據(jù)生成的目標(biāo)分為3類生成任務(wù),以更
    的頭像 發(fā)表于 11-25 15:55 ?1237次閱讀
    從HumanEval到CoderEval: 你的<b class='flag-5'>代碼</b><b class='flag-5'>生成</b>模型真的work嗎?

    simulink自動生成ROS代碼

    當(dāng)我們用simulink完成控制程序的搭建后,我們期望下一次可以直接對ROS進(jìn)行控制,而不是每次都需要啟動matlab和simulink,因此我們可以使用simulink的代碼生成器,生成ROS
    的頭像 發(fā)表于 11-15 17:53 ?656次閱讀
    simulink自動<b class='flag-5'>生成</b>ROS<b class='flag-5'>代碼</b>

    基于 TouchGFX 生成代碼添加觸摸功能的方法

    基于 TouchGFX 生成代碼添加觸摸功能的方法
    的頭像 發(fā)表于 10-27 09:21 ?711次閱讀
    基于 TouchGFX <b class='flag-5'>生成</b>的<b class='flag-5'>代碼</b><b class='flag-5'>中</b>添加觸摸功能的方法

    【中秋國慶不斷更】XML在HarmonyOS生成,解析與轉(zhuǎn)換(上)

    一、XML概述 XML(可擴(kuò)展標(biāo)記語言)是一種用于描述數(shù)據(jù)的標(biāo)記語言,旨在提供一種通用的方式來傳輸和存儲數(shù)據(jù),特別是Web應(yīng)用程序中經(jīng)常使用的數(shù)據(jù)。XML并不預(yù)定義標(biāo)記。因此,
    發(fā)表于 09-27 15:21

    如何一鍵生成mybatisplus

    Mybatis代碼生成器相信大家用過,本篇博客我們來介紹如何一鍵生成mybatisplus 的相關(guān)Entity、Mapper、Mapper XML、Service、Controller
    的頭像 發(fā)表于 09-25 14:23 ?650次閱讀
    如何一鍵<b class='flag-5'>生成</b>mybatisplus