結構體在協(xié)議處理中的妙用

姓名:仝啟龍 ? 學號:17101223413

本文轉自

嵌入式系統(tǒng)開發(fā)者之家

【嵌牛導讀】

在網(wǎng)絡協(xié)議、通信控制、嵌入式系統(tǒng)的C/C++編程中,我們經(jīng)常要傳送的不是簡單的字節(jié)流(char型數(shù)組),而是多種數(shù)據(jù)組合起來的一個整體,其表現(xiàn)形式是一個結構體。

【嵌牛鼻子】結構體,通信協(xié)議,單片機通信

【嵌牛提問】什么是結構體?什么是通信協(xié)議?單片機如何用結構體實現(xiàn)通信

【嵌牛正文】

結構體(struct)是由一系列具有相同類型或不同類型的數(shù)據(jù)構成的數(shù)據(jù)集合。在C語言中,結構體(struct)指的是一種數(shù)據(jù)結構,是聚合數(shù)據(jù)類型。

通信協(xié)議又稱通信規(guī)程,是指通信雙方對數(shù)據(jù)傳送控制的一種約定。約定中包括對數(shù)據(jù)格式,同步方式,傳送速度,傳送步驟,檢糾錯方式以及控制字符定義等問題做出統(tǒng)一規(guī)定,通信雙方必須共同遵守。電腦與電腦之間的溝通必須講述相同的語言,才能互相傳輸信息。這些規(guī)格(語言)的規(guī)定都是事先在會議上講好的,一般我們稱之為“協(xié)議”(protocol)。

單片機控制系統(tǒng)中會經(jīng)常用到不同的系統(tǒng)間通訊功能,每種通訊方式都有其自有的數(shù)據(jù)通訊協(xié)議。編寫程序的時候,就需要進行各種接收數(shù)據(jù)的協(xié)議解析與發(fā)送數(shù)據(jù)的協(xié)議數(shù)據(jù)打包工作。結構體定義的數(shù)據(jù)結構,可以像一套模具一樣,把接收到的數(shù)據(jù)按照固定的模式進行解析讀取操作,也可以非常方便的按照結構非常方便的填充數(shù)據(jù),完成協(xié)議數(shù)據(jù)打包工作。

比如:某單片機系統(tǒng)通過串行通訊端口以115200bps的速率與PC軟件進行數(shù)據(jù)通訊。通訊功能非常簡單:PC下發(fā)一個字節(jié)的數(shù)據(jù)采集指令,當單片機系統(tǒng)接收到這個字節(jié)后,一次上傳溫度、壓力、A相電壓、B相電壓、C相電壓、A相電流、B相電流、C相電流。為了方便單片機系統(tǒng)進行上傳數(shù)據(jù)內容的打包,現(xiàn)根據(jù)協(xié)議形式,定義一個結構體:


sendData即為要上傳的協(xié)議數(shù)據(jù)包。當接收到協(xié)議數(shù)據(jù)包的系統(tǒng)解析數(shù)據(jù)內容的時候,也可以用類似的方法,只不過,這次是使用結構體指針,指向數(shù)據(jù)接收緩沖區(qū)的首地址!


datPtr結構體指針,可以非常自如的指向任何一個緩沖區(qū)中的數(shù)據(jù)元素,如此操作,對于解析協(xié)議數(shù)據(jù)來說,是非常享受的一個過程。

通過上面簡單的代碼演示,大家可以非常直接的看到,靈活的使用結構體進行通訊協(xié)議數(shù)據(jù)的打包與解析工作是非常方便的!因為使用結構體,可以隨時隨地的改變協(xié)議數(shù)據(jù)類型、數(shù)據(jù)的位置、修改數(shù)據(jù)種類,而用戶的應用程序,只需要修改結構體定義的內容而已,通過本文的描述,希望大家在日后的工作過程中能夠靈活的使用這種方法。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容