姓名:仝啟龍 ? 學號:17101223413
本文轉自
【嵌牛導讀】
在網(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ù)種類,而用戶的應用程序,只需要修改結構體定義的內容而已,通過本文的描述,希望大家在日后的工作過程中能夠靈活的使用這種方法。