2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

嵌入式自定義協(xié)議都按TLV格式封裝吧~

 漢無為 2025-06-04 發(fā)布于湖北


正文


大家好,我是bug菌,又見面了~
最近好像又中招了,新冠、甲流、now,那是一個都逃不掉,辦公室只要有咳咳咳~基本上沒幾個人逃得掉~
在嵌入式軟件開發(fā)中經(jīng)??吹接信笥炎远x協(xié)議,主要還是資源受限,然后功能也相對比較專業(yè),后續(xù)維護(hù)其實也簡單很多,但到了項目的一定階段或者規(guī)模又不得不考慮可擴(kuò)展性、兼容性等等問題,那么協(xié)議上就感覺千奇百怪了,那么今天bug菌跟大家聊聊通信協(xié)議中的TLV格式,基本上自定義協(xié)議最終都會向該方式或者類似的方式去靠攏,所以一步到位多好~

1

TLV數(shù)據(jù)格式

嵌入式物聯(lián)網(wǎng)中的TLV(Type-Length-Value)格式是一種高效、靈活的數(shù)據(jù)封裝方式,廣泛應(yīng)用于資源受限的物聯(lián)網(wǎng)設(shè)備通信中。
圖片
結(jié)構(gòu)解析:
Type(類型)
標(biāo)識數(shù)據(jù)的類型(如電壓、溫度、濕度等),通常用1-2字節(jié)表示。例如,0x01代表電壓,0x02代表溫度。類型基本上就決定了這個TLV數(shù)據(jù)單元的長度所占字節(jié)和Value的解析方式等。
Length(長度)
表示Value字段的字節(jié)數(shù),可固定或變長編碼。例如,1字節(jié)(0-255)或變長整數(shù)(節(jié)省空間)。
Value(值)
實際數(shù)據(jù)內(nèi)容,長度由Length字段定義,如溫度值3.11V,放大1000倍編碼為整形兩個字節(jié)0x0C 0x1C

介紹了TLV數(shù)據(jù)封裝格式,那么下面再詳細(xì)介紹下其三大特點:

2

類型自描述

每個TLV結(jié)構(gòu)的第一部分為Type字段(通常為1-4字節(jié)),用于明確標(biāo)識數(shù)據(jù)的語義和編碼方式,前面在介紹該字段的時候有說明了一下。

但是該字段需要收發(fā)雙方約定好,這樣就誕生了類型映射表。

類型映射表:Type值通過預(yù)定義的協(xié)議規(guī)范或動態(tài)協(xié)商(如設(shè)備握手階段)確定,接收方根據(jù)Type值選擇對應(yīng)的解析邏輯。 若Type值與實際數(shù)據(jù)格式不匹配(例如Type聲明為整數(shù)但Value為字符串),接收方可直接報錯。 

這樣的話就無需外部元數(shù)據(jù),數(shù)據(jù)本身攜帶類型信息,解析器無需依賴額外的協(xié)議文檔或配置文件,現(xiàn)在挺多高級一點的序列化工具都需要使用工具等,麻煩。

在兼容性方面,不同設(shè)備或協(xié)議版本可以通過擴(kuò)展Type定義(如預(yù)留私有Type范圍)實現(xiàn)兼容,舊設(shè)備可忽略未知Type。同樣你進(jìn)行協(xié)議升級的時候,,只需定義新Type值(如0x04表示PM2.5),舊設(shè)備可跳過未知字段,新設(shè)備解析新數(shù)據(jù),當(dāng)前前提是你需要定義較多的type字段。

3

動態(tài)變長

緊隨Type后的Length字段長度并不是固定的,通常為1-4字節(jié)夠了,它主要是用于聲明Value部分的字節(jié)長度。

例如:

若Value是4字節(jié)整數(shù),Length=0x04

若Value是可變長字符串'Hello',Length=0x05

當(dāng)然也可以更加靈活的編碼,Length字段的字節(jié)數(shù)可根據(jù)協(xié)議設(shè)計動態(tài)調(diào)整。

短數(shù)據(jù)(≤255字節(jié)):Length用1字節(jié)表示;

長數(shù)據(jù)(如固件包):Length用4字節(jié)表示

這樣一方面能夠節(jié)省避免固定長度字段的填充浪費,另一方面可以支持可變數(shù)據(jù),以適應(yīng)物聯(lián)網(wǎng)場景中數(shù)據(jù)長度多變的需求(如傳感器數(shù)據(jù)、配置參數(shù)、日志文本)。

不知道大家平時用過流式傳輸沒,通過Length提前預(yù)知數(shù)據(jù)邊界,無需等待完整數(shù)據(jù)包,做到接收方可邊接收邊解析數(shù)據(jù)。

4

高效二進(jìn)制編碼

TLV整體以二進(jìn)制字節(jié)流傳輸,而非文本格式(如JSON、XML)。而且在協(xié)議約定中采用的是一種緊湊編碼規(guī)則,比如:

整數(shù)使用最小字節(jié)數(shù)(如0x7F以內(nèi)用1字節(jié),超過則用2字節(jié));

浮點數(shù)采用IEEE 754標(biāo)準(zhǔn)壓縮;

枚舉值直接用單字節(jié)表示等等,可以做到無需轉(zhuǎn)換直接按字節(jié)偏移讀取數(shù)據(jù),在資源受限平臺大家確實比較鐘愛。按照TLV的數(shù)據(jù)封裝自定義協(xié)議基本上能夠滿足大部分嵌入式應(yīng)用場景了。

最后

      好了,今天就跟大家分享這么多了,如果你覺得有所收獲,一定記得點個~

推薦專輯  點擊藍(lán)色字體即可跳轉(zhuǎn)

?  MCU進(jìn)階專輯 圖片

?  嵌入式C語言進(jìn)階專輯 圖片

?  “bug說”專輯 圖片

專輯|Linux應(yīng)用程序編程大全

專輯|學(xué)點網(wǎng)絡(luò)知識

專輯|手撕C語言

專輯|手撕C++語言

專輯|經(jīng)驗分享

專輯|電能控制技術(shù)

專輯 | 從單片機(jī)到Linux

圖片

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多