微控制器中對通訊資料流分包粘包的處理機制

2021-10-19 08:52:22 字數 888 閱讀 5458

在使用串列埠或其他通訊模組接收協議資料時,是以流的方式接收的,有可能1個協議包分段接收到,也有可能多個資料報一起接收到,這時需要使用通訊協議預處理機制,解決分包粘包的問題。

基本流程:

從通訊模組獲取位元組流,逐個位元組輸入到預解碼模組

在初始狀態,尋找協議頭部標誌位元組,如果找到,則轉入協議內容接收位元組,如果協議前部包含長度字段,則先轉入到長度字段解碼狀態

在長度字段解碼狀態,解碼長度,獲取剩餘需要接收的位元組數,然後轉入協議內容接收狀態

在協議內容接收狀態,如果剩餘需要接收位元組數為0,或找到協議尾部標誌,則預解碼完成

所有經過預解碼的位元組,都儲存到預先定義的接收緩衝區(位元組陣列),預解碼完成後,該緩衝區儲存的是乙個協議資料報

下面**以協議格式 at=***\r\n 為例

//預解碼狀態;0

;//預解碼狀態重置

void

(void

)//預解碼處理

(uint8_t c)

else

break

;case1:

]= c;

if(c ==

't')

else

break

;case2:

if]= c;

if(c ==

'\n'

)break;}

return0;

//無錯誤或無結果,繼續接收後續位元組

}//串列埠資料接收&處理流程

void

(void

)else

if(result ==0)

//等待後續資料

else

if(result ==-1

)//沒找到協議頭,忽略

else

//其它錯誤}}

微控制器中的幾種通訊方式

首先弄懂序列通訊和並行通訊以及串列埠通訊和並口通訊的概念。序列通行 它是乙個概念,它是指資料一位一位地順序傳送,其特點就是通訊線路 簡單,只要一對傳輸線 就可實現雙向通訊,適用於遠距離通訊,但傳輸速度慢。它 包括普通的串列埠通訊,i2c,spi,uart.串列埠通訊 是一種實際通訊方式,但是我們可以...

微控制器中串列埠如何傳送超過8位的資料

原文中有點小錯誤,做了小更改。在做下位機通訊時往往會用到串列埠,包括下位機將資料傳輸給上位機,或者是下位機與下位機之間進行資料傳輸,這時候就會遇到傳送資料的問題,微控制器通過串列埠傳送資料時往往是一次乙個位元組 8位 如果傳輸char 8位 型資料則很好辦,只需要直接傳送就可以了,但是在傳送int型...

資料儲存過程中的完整性 微控制器中的資料儲存器ram

儲存器是由許多的儲存單元集合所成,按照單元號順序進行排列。每個單元由若干三進製位構成,以表示儲存單元中所存放的數值,這種結構和陣列的結構非常相似,故在vhdl語言中,通常是由陣列描述儲存器。儲存器是用來儲存程式和各種資料資訊的記憶部件。資料儲存器ram 這是個可以隨時訪問資料的一塊儲存器,也就是可以...