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位長度(有符號或無符號),以及浮點類型等。
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)于生成器幾點提示
1.Mavgen支持的語言及版本
2.路徑
因為命令行生成器支持相對路徑,建議將xml文件拷貝到如下路徑:MAVLinkmessage_definitionsv1.0
3.命令語法和選項說明
初學(xué)者不用深入理解,只需要知道如何生成C代碼即可(參考我上面提供的哪一條命令)。
關(guān)于生成器工具更多的內(nèi)容可以參考:
https://mavlink.io/en/getting_started/generate_libraries.html
-
生成器
+關(guān)注
關(guān)注
7文章
319瀏覽量
21129 -
C代碼
+關(guān)注
關(guān)注
1文章
89瀏覽量
14357 -
mavlink
+關(guān)注
關(guān)注
0文章
8瀏覽量
2600
發(fā)布評論請先 登錄
相關(guān)推薦
Flexus X 實例 C#/.Net Core 結(jié)合(git 代碼管理、docker 自定義鏡像)快速發(fā)布部署 - 讓你的項目飛起來~
![Flexus X 實例 <b class='flag-5'>C</b>#/.Net Core 結(jié)合(git <b class='flag-5'>代碼</b>管理、docker 自<b class='flag-5'>定義</b>鏡像)快速發(fā)布部署 - 讓你的項目飛起來~](https://file1.elecfans.com//web3/M00/03/C8/wKgZPGdsBXmALG2KAACgmvlB9Hk561.png)
SRIO介紹及xilinx的vivado 2017.4中生成srio例程代碼解釋
![SRIO介紹及xilinx的vivado 2017.4<b class='flag-5'>中生成</b>srio例程<b class='flag-5'>代碼</b>解釋](https://file1.elecfans.com/web3/M00/01/C8/wKgZO2dYALyARwwBAAAJH5-7BYk234.jpg)
源代碼解析工具與自動化流程圖生成解決方案
深度學(xué)習(xí)中的無監(jiān)督學(xué)習(xí)方法綜述
生成式AI的定義和特征
workbench生成代碼出現(xiàn)fatal error stm32cubemx5.2.0.analyticsserver.xml:1:1:premature end of file什么原因?
探討AI編寫代碼技術(shù),以及提高代碼質(zhì)量的關(guān)鍵:靜態(tài)代碼分析工具Perforce Helix QAC & Klocwork
OpenHarmony語言基礎(chǔ)類庫【@ohos.xml (xml解析與生成)】
Simulink自動生成代碼現(xiàn)階段的學(xué)習(xí)筆記
![Simulink自動<b class='flag-5'>生成</b><b class='flag-5'>代碼</b>現(xiàn)階段的<b class='flag-5'>學(xué)習(xí)</b>筆記](https://file1.elecfans.com/web2/M00/CA/B5/wKgZomYfOryASYcYAAAhf1BV3tg663.png)
ST-MotorControl生成keil代碼,在cubemx中沒有任何改動,代碼也沒有改動是怎么回事?
MAVLink在應(yīng)用編程中的編程原理和思路
![<b class='flag-5'>MAVLink</b>在應(yīng)用編程<b class='flag-5'>中</b>的編程原理和思路](https://file1.elecfans.com/web2/M00/C3/50/wKgZomXqmIyALGT3AAARGS2NY5I511.jpg)
【JAVA UI】【HarmonyOS】【Demo】 鴻蒙如何進(jìn)行 xml 解析
![【JAVA UI】【HarmonyOS】【Demo】 鴻蒙如何進(jìn)行 <b class='flag-5'>xml</b> 解析](https://file1.elecfans.com/web2/M00/C0/2C/wKgZomXTCWiAOM4KAAHN-csgQK0652.png)
評論