通用可靠的串口/以太網(wǎng)網(wǎng)關(guān)設計
1.2 串口數據傳送
串口數據傳送的幀格式如下:本文引用地址:http://dyxdggzs.com/article/148750.htm
其中各個(gè)字段的意義如下:
◆SFD:幀首定界符;
◆EFD:幀尾定界符,SFD和EFD為確定的特定值;
◆Seq:幀序號;
◆Type:幀類(lèi)型,其值見(jiàn)表1;
◆LEN:Data字段的字節數;
◆Data:實(shí)際要傳送的數據;
◆FCS:幀校驗,是一個(gè)簡(jiǎn)單校驗,為Seq.至Data字段中所有字節按位異或運算的結果。
1.2.1 串口發(fā)送
串口發(fā)送隊列示意圖如圖3所示。網(wǎng)關(guān)使用FIFO(先入先出)隊列緩沖發(fā)送幀,包括待發(fā)送隊列和待確認隊列兩個(gè)隊列,每個(gè)隊列為一個(gè)雙向循環(huán)鏈表,節點(diǎn)從尾部插入,頭部讀出。
當有數據需要從串口發(fā)送時(shí),首先將要發(fā)送的數據按幀格式加上一些附加的字段組成一個(gè)完整的幀,然后插入待發(fā)送隊列尾。插入待發(fā)送隊列的幀并不一定會(huì )被立即發(fā)送,但只要待發(fā)送隊列中緩沖有需要發(fā)送的幀,串口就會(huì )從隊列頭逐個(gè)的讀取待發(fā)送幀以中斷的方式發(fā)送,直到待發(fā)送隊列為空。
每一幀發(fā)送完畢后,如果是確認幀,便會(huì )被立即從待發(fā)送隊列中刪除并釋放掉內存,該幀的發(fā)送過(guò)程結束;如果是非確認幀,即數據幀或命令幀,那么該幀不會(huì )被立即釋放,而是從待發(fā)送隊列刪除而插入待確認隊列尾,等待串口另一端的設備發(fā)送對應的確認幀。
若在超時(shí)時(shí)間內收到對應的確認幀,則將該幀從待確認隊列刪除釋放,該幀的發(fā)送過(guò)程結束;若等待超時(shí),則將該幀從待確認刪除并重新插入待發(fā)送隊列尾,以重發(fā)此幀。當然有重發(fā)次數限制,若達到了最大重發(fā)次數仍然未收到對應的確認幀,則丟棄該幀,該幀的發(fā)送過(guò)程結束。
tcp/ip相關(guān)文章:tcp/ip是什么
評論