新聞中心

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 來源:網(wǎng)絡(luò) 收藏

1.2.2 接收
接收使用中斷方式,從接收到的字節(jié)數(shù)據(jù)并不直接處理,而是先存入一個(gè)環(huán)形緩沖,環(huán)形緩沖示意圖如圖4所示。從頭偏移處寫入,從尾偏移處讀出,每寫入或讀出一字節(jié)頭或尾都將模遞增,且頭偏移處為空,尾偏移處為滿。

本文引用地址:http://butianyuan.cn/article/148750.htm

f.JPG


只要串口接收到數(shù)據(jù),就將其從頭偏移處寫入串口的環(huán)形緩沖。如果緩沖滿了,則用新數(shù)據(jù)覆蓋未處理的舊數(shù)據(jù)。
在將一個(gè)字節(jié)數(shù)據(jù)寫入緩沖的同時(shí),判斷其是否等于幀結(jié)束定界符EFD,如果等于,則表示緩沖中可能存在一個(gè)完整的幀(只是可能,并不能完全確定,因?yàn)橐粋€(gè)普通的字節(jié)數(shù)據(jù)完全有可能正好等于EFD),此時(shí)便可從環(huán)形緩沖中按幀格式解析數(shù)據(jù)。若解析到完整的幀,則做相應(yīng)的處理:首先,根據(jù)幀中FCS字段做差錯(cuò)校驗(yàn),如果校驗(yàn)正確,則從串口回送一個(gè)同序號(hào)的確認(rèn)幀;然后從幀中取出凈荷數(shù)據(jù)從Socket發(fā)送。
從緩沖中解析數(shù)據(jù)的過程簡(jiǎn)述如下:從環(huán)形緩沖的尾偏移處開始讀字節(jié)數(shù)據(jù),查驗(yàn)是否等于幀開始定界符SFD,若不等于則丟棄并繼續(xù)讀下一字節(jié),若等于則向后偏移讀取長(zhǎng)度域LEN,根據(jù)長(zhǎng)度值,便能確定幀結(jié)束定界符EFD的位置。查驗(yàn)此位置的字節(jié)數(shù)據(jù),若不等于EFD,則認(rèn)為之前等于SFD的字節(jié)只是個(gè)普通數(shù)據(jù),并不是幀開始定界符,將其丟棄并繼續(xù)讀取查驗(yàn)下一字節(jié);若等于EFD,則認(rèn)為SFD到FFD之間為一個(gè)完整的幀。
1.3 Socket數(shù)據(jù)傳送
Socket數(shù)據(jù)傳送的幀格式如下:

g.JPG


相比串口幀格式,少了Seq.、Type和FCS字段。這三個(gè)字段在串口數(shù)據(jù)傳送中是用來保證性的,而使用TCP Socket,下層的TCP協(xié)議會(huì)保證通信的性,應(yīng)用層只需要保證數(shù)據(jù)的完整性,所以不需要這些字段。其他字段相同,意義也分別相同。
1 3.1 Socket發(fā)送
Socket接收過程同串口接收類似,接收的數(shù)據(jù)并不直接處理,而是先存入環(huán)形緩沖。然后,按Socket幀格式,解析環(huán)形緩沖中的數(shù)據(jù)。解析到的數(shù)據(jù)幀插入串口發(fā)送隊(duì)列,從串口轉(zhuǎn)發(fā)。
1.3.2 Socket接收
Socket發(fā)送相比串口發(fā)送操作更簡(jiǎn)單,因?yàn)橄聦拥腡CP協(xié)議會(huì)保證通信的性,所以不需要再另外實(shí)現(xiàn)確認(rèn)、重發(fā)等機(jī)制,發(fā)送隊(duì)列中只需要一個(gè)待發(fā)送隊(duì)列即可,不需要待確認(rèn)隊(duì)列。而且在具體實(shí)現(xiàn)中,并沒有真的構(gòu)造一個(gè)Socket發(fā)送隊(duì)列,而是利用了操作系統(tǒng)提供的線程間通信機(jī)制中的郵箱通信方式,需要從Socket發(fā)送數(shù)據(jù)時(shí),只需將數(shù)據(jù)的首地址以郵件的方式發(fā)送到Socket發(fā)送線程指定的郵箱中。

2 實(shí)現(xiàn)
2.1 軟硬件平臺(tái)
軟硬件平臺(tái)包括操作系統(tǒng)RT-Thread和ARM9開發(fā)板Mini2440。

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




評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉