在使用串列埠或其他通訊模組接收協議資料時,是以流的方式接收的,有可能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 這是個可以隨時訪問資料的一塊儲存器,也就是可以...