<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 通用可靠的串口/以太網(wǎng)網(wǎng)關(guān)設(shè)計(jì)

          通用可靠的串口/以太網(wǎng)網(wǎng)關(guān)設(shè)計(jì)

          作者: 時(shí)間:2012-07-18 來(lái)源:網(wǎng)絡(luò) 收藏

          1.2 數(shù)據(jù)傳送
          數(shù)據(jù)傳送的幀格式如下:

          本文引用地址:http://www.ex-cimer.com/article/148750.htm

          c.JPG


          其中各個(gè)字段的意義如下:
          ◆SFD:幀首定界符;
          ◆EFD:幀尾定界符,SFD和EFD為確定的特定值;
          ◆Seq:幀序號(hào);
          ◆Type:幀類(lèi)型,其值見(jiàn)表1;
          ◆LEN:Data字段的字節(jié)數(shù);
          ◆Data:實(shí)際要傳送的數(shù)據(jù);
          ◆FCS:幀校驗(yàn),是一個(gè)簡(jiǎn)單校驗(yàn),為Seq.至Data字段中所有字節(jié)按位異或運(yùn)算的結(jié)果。

          d.JPG


          1.2.1 發(fā)送
          串口發(fā)送隊(duì)列示意圖如圖3所示。使用FIFO(先入先出)隊(duì)列緩沖發(fā)送幀,包括待發(fā)送隊(duì)列和待確認(rèn)隊(duì)列兩個(gè)隊(duì)列,每個(gè)隊(duì)列為一個(gè)雙向循環(huán)鏈表,節(jié)點(diǎn)從尾部插入,頭部讀出。

          e.JPG


          當(dāng)有數(shù)據(jù)需要從串口發(fā)送時(shí),首先將要發(fā)送的數(shù)據(jù)按幀格式加上一些附加的字段組成一個(gè)完整的幀,然后插入待發(fā)送隊(duì)列尾。插入待發(fā)送隊(duì)列的幀并不一定會(huì)被立即發(fā)送,但只要待發(fā)送隊(duì)列中緩沖有需要發(fā)送的幀,串口就會(huì)從隊(duì)列頭逐個(gè)的讀取待發(fā)送幀以中斷的方式發(fā)送,直到待發(fā)送隊(duì)列為空。
          每一幀發(fā)送完畢后,如果是確認(rèn)幀,便會(huì)被立即從待發(fā)送隊(duì)列中刪除并釋放掉內(nèi)存,該幀的發(fā)送過(guò)程結(jié)束;如果是非確認(rèn)幀,即數(shù)據(jù)幀或命令幀,那么該幀不會(huì)被立即釋放,而是從待發(fā)送隊(duì)列刪除而插入待確認(rèn)隊(duì)列尾,等待串口另一端的設(shè)備發(fā)送對(duì)應(yīng)的確認(rèn)幀。
          若在超時(shí)時(shí)間內(nèi)收到對(duì)應(yīng)的確認(rèn)幀,則將該幀從待確認(rèn)隊(duì)列刪除釋放,該幀的發(fā)送過(guò)程結(jié)束;若等待超時(shí),則將該幀從待確認(rèn)刪除并重新插入待發(fā)送隊(duì)列尾,以重發(fā)此幀。當(dāng)然有重發(fā)次數(shù)限制,若達(dá)到了最大重發(fā)次數(shù)仍然未收到對(duì)應(yīng)的確認(rèn)幀,則丟棄該幀,該幀的發(fā)送過(guò)程結(jié)束。

          tcp/ip相關(guān)文章:tcp/ip是什么




          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();