完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>
標(biāo)簽 > TLV
TLV,即Tag(Type)-Length-Value,是一中簡(jiǎn)單實(shí)用的數(shù)據(jù)傳輸方案。本章還詳細(xì)介紹了TLV協(xié)議,TLV格式,TLV編碼等內(nèi)容。
傳輸協(xié)議根據(jù)TLV(type,length,value)協(xié)議編制
TLV協(xié)議說明:
TLV格式的數(shù)據(jù)包中類型type指明了當(dāng)前包的含義,type是單一包的類型或者是嵌套包的類型;
長(zhǎng)度length指明了當(dāng)前包的大小,注意這個(gè)的大小包括了type、length、value三部分;
值value包括了該數(shù)據(jù)包的實(shí)際內(nèi)容,如果是嵌套包,內(nèi)容為里面各個(gè)子包的總和。
當(dāng)前Type字段為signed short類型,長(zhǎng)度為2個(gè)字節(jié);
Length字段為signed long 類型,長(zhǎng)度為4個(gè)字節(jié)。
TLV,即Tag(Type)-Length-Value,是一中簡(jiǎn)單實(shí)用的數(shù)據(jù)傳輸方案。
簡(jiǎn)單的數(shù)據(jù)傳輸協(xié)議
在TLV的定義中,可以知道它包括三個(gè)域,分別為:標(biāo)簽域(Tag),長(zhǎng)度域(Length),內(nèi)容域(Value)。這里的長(zhǎng)度域的值實(shí)際上就是內(nèi)容域的長(zhǎng)度。
其實(shí)就是一個(gè)簡(jiǎn)單的自定義通信協(xié)議,將對(duì)應(yīng)的數(shù)據(jù)進(jìn)行編碼、組織。我們之前自己寫一個(gè)簡(jiǎn)單的C/S模型數(shù)據(jù)傳輸時(shí),比如發(fā)送一個(gè)非基礎(chǔ)類型的結(jié)點(diǎn)信息,就會(huì)采用struct,比如:
[cpp] view plain copystruct Messagebase{
unsigned int command;
char login_code[8];
char name[8];
};
這個(gè)struct描述了簡(jiǎn)單的login操作的需求信息,但是比如說有一天我們需要增加一個(gè)字段,加上login人的年齡,就需要新的一個(gè)字段:
[cpp] view plain copystruct Messagebase{
unsigned int command;
unsigned int birthday;
char login_code[8];
char name[8];
};
這樣導(dǎo)致的結(jié)果就是對(duì)應(yīng)解析的代碼也需要進(jìn)行修改,加入針對(duì)birthday字段的處理,因?yàn)樵鹊奶幚聿恢罃?shù)據(jù)包的第三個(gè)字段是name還是login_code,這樣的處理只能用作簡(jiǎn)單的數(shù)據(jù)包擴(kuò)展。
但是這個(gè)擴(kuò)展有很大的局限性,總不能這么一直修改吧,所以考慮可以給每個(gè)數(shù)據(jù)段加上一個(gè)表示Tag(Type),這樣就不用擔(dān)心字段的任意添加了,并且對(duì)于name域來說,定長(zhǎng)的特性肯定是不行的,所以,所以,就有了《Tag, Length, Value》三元組編碼,簡(jiǎn)稱TLV編碼。但是需要注意的是,Value具體的含義,還是需要通信需求來決定,所以用裝逼的話來說,TLV這種編碼方式不具備結(jié)構(gòu)化(結(jié)構(gòu)未知)特點(diǎn)。但是TLV具備很好的擴(kuò)展性,其中字段可以是結(jié)構(gòu)式嵌套即value 域支持復(fù)合型元數(shù)據(jù)結(jié)構(gòu),比如如下定義:
[cpp] view plain copystruct tlv_entity {
unsigned char* tag; //標(biāo)記
unsigned char* length; //數(shù)據(jù)長(zhǎng)度
unsigned char* value; //數(shù)據(jù)
unsigned int tagSize; //標(biāo)記占用字節(jié)數(shù)
unsigned int lengthSize; //數(shù)據(jù)長(zhǎng)度占用字節(jié)數(shù)
tlv_entity* sub_tlventity; //子嵌套TLV實(shí)體
};
數(shù)據(jù)的發(fā)送過程其實(shí)就是打包的過程,目的是將一個(gè)從終端上發(fā)的請(qǐng)求數(shù)據(jù)——字節(jié)數(shù)組,構(gòu)造成一系列的TLV結(jié)構(gòu)實(shí)體;解包的目的剛好相反,就是將TLV結(jié)構(gòu)實(shí)體解析成字節(jié)數(shù)組,所以對(duì)應(yīng)我們需要一個(gè)針對(duì)TLV數(shù)據(jù)的封裝處理:
[cpp] view plain copyclass tlv_deal{
Public:
tlv_deal();
virtual ~tlv_deal();
static void construct_MS(unsigned char* buffer,unsigned int buffer_len,
tlv_entity* entity,unsigned int entity_len,unsigned int status=0 );
static void parse_MS(unsigned char* buffer,unsigned int buffer_len,
tlv_entity* entity,unsigned int entity_len);
};
對(duì)于簡(jiǎn)單的TLV數(shù)據(jù)元結(jié)構(gòu),盜圖如下:
復(fù)合的TLV數(shù)據(jù)元結(jié)構(gòu):
Primitive or constructed BER-TLV data object number,包含一個(gè)簡(jiǎn)單數(shù)據(jù)元結(jié)構(gòu)或者也可以是一個(gè)符合數(shù)據(jù)元結(jié)構(gòu)。這樣可以看出,算法中必須要實(shí)現(xiàn)Tag的嵌套功 能,遞歸算法不可少。
其實(shí)說白了,我們看到的XML等標(biāo)記式的結(jié)構(gòu)也是屬于TLV的,以及facebook的thrift,還有g(shù)oogle的protobuf (在這說純屬裝逼,只是簡(jiǎn)單了解),基本都是TLV的例子,但是模型簡(jiǎn)單,實(shí)際的需求決定了處理的難度。哎,就算是簡(jiǎn)單的概念吧,我估計(jì)大家都沒發(fā)覺自己以前寫代碼用了這樣的概念,只是不知道名字罷了,但是真正的一個(gè)嵌套式的TLV結(jié)構(gòu),在實(shí)際應(yīng)用中絕對(duì)還是不簡(jiǎn)單的,打包、解析也絕對(duì)會(huì)是體力活。額,都不知道說什么了,還是去再看看對(duì)應(yīng)的應(yīng)用層協(xié)議設(shè)計(jì)再來裝逼吧。
TLV5618和TLV2543應(yīng)用12864的51單片機(jī)驅(qū)動(dòng)程序和工程文件免費(fèi)下載立即下載
類別:C語言|源代碼 2019-05-30 標(biāo)簽:單片機(jī)驅(qū)動(dòng)程序TLV
高性能低功耗模數(shù)轉(zhuǎn)換器TLV2548的詳細(xì)資料免費(fèi)下載立即下載
類別:單片機(jī) 2018-05-24 標(biāo)簽:模數(shù)轉(zhuǎn)換器低功耗TLV
可調(diào)節(jié)和固定低壓差穩(wěn)壓器立即下載
類別:電源技術(shù) 2017-06-25 標(biāo)簽:穩(wěn)壓器低壓差低壓差穩(wěn)壓器
80C32E單片機(jī)與TLV2548的接口電路控制設(shè)計(jì)
O 引言 TLV2548是TI公司生產(chǎn)的12位、多通道、小尺寸、低功耗、高速串行A/D轉(zhuǎn)換芯片,它有一個(gè)專與DSP連...
編輯推薦廠商產(chǎn)品技術(shù)軟件/工具OS/語言教程專題
電機(jī)控制 | DSP | 氮化鎵 | 功率放大器 | ChatGPT | 自動(dòng)駕駛 | TI | 瑞薩電子 |
BLDC | PLC | 碳化硅 | 二極管 | OpenAI | 元宇宙 | 安森美 | ADI |
無刷電機(jī) | FOC | IGBT | 逆變器 | 文心一言 | 5G | 英飛凌 | 羅姆 |
直流電機(jī) | PID | MOSFET | 傳感器 | 人工智能 | 物聯(lián)網(wǎng) | NXP | 賽靈思 |
步進(jìn)電機(jī) | SPWM | 充電樁 | IPM | 機(jī)器視覺 | 無人機(jī) | 三菱電機(jī) | ST |
伺服電機(jī) | SVPWM | 光伏發(fā)電 | UPS | AR | 智能電網(wǎng) | 國民技術(shù) | Microchip |
Arduino | BeagleBone | 樹莓派 | STM32 | MSP430 | EFM32 | ARM mbed | EDA |
示波器 | LPC | imx8 | PSoC | Altium Designer | Allegro | Mentor | Pads |
OrCAD | Cadence | AutoCAD | 華秋DFM | Keil | MATLAB | MPLAB | Quartus |
C++ | Java | Python | JavaScript | node.js | RISC-V | verilog | Tensorflow |
Android | iOS | linux | RTOS | FreeRTOS | LiteOS | RT-THread | uCOS |
DuerOS | Brillo | Windows11 | HarmonyOS |