通用可靠的串口/以太網(wǎng)網(wǎng)關(guān)設(shè)計
2. 1. 1 RT-Thread實時操作系統(tǒng)
為實現(xiàn)網(wǎng)關(guān),選用了實時操作系統(tǒng)RT-Thread。RT-Thread是一款國內(nèi)的開源實時操作系統(tǒng),并且商業(yè)許可證非常寬松,由國內(nèi)一些專業(yè)開發(fā)人員開發(fā)、維護(hù)。RT-Thrcad不僅是一款高效、穩(wěn)定的實時核心,也是一套面向嵌入式系統(tǒng)的軟件平臺,覆蓋了全搶占的實時操作系統(tǒng)內(nèi)核小巧的文件系統(tǒng)、輕型的TCP/IP協(xié)議棧以及輕型的圖形用戶界面。本文引用地址:http://cafeforensic.com/article/148750.htm
圖5是RT-Thread及外圍組件的基本框架圖。RT-Thread的使用范圍極為靈活,可以從資源極度緊張的小型系統(tǒng)到帶內(nèi)存管理單元、網(wǎng)絡(luò)功能的基本計算單元。RT-Thread有著高度可配置、易裁減、可擴(kuò)展性好和可靠性高等特點,適用于嵌入式實時系統(tǒng)。
2. 1.2 Mini2440開發(fā)板
硬件平臺使用了Mini2440開發(fā)板,Mini2440是一款A(yù)RM9開發(fā)板,微處理器采用三星公司的S3C2440芯片,具有64 MB SDRAM、128 MB/256 MB/1 GB大小可選的NAND F1ash和2 MB NOR Flash,外設(shè)包括1個100M以太網(wǎng)RJ-45口(采用DM9000網(wǎng)卡)和3個串口等。
2.2 網(wǎng)關(guān)實現(xiàn)
2. 2.1 軟件相關(guān)
如圖2所示,系統(tǒng)使用了3個線程:串口接收線程、Socket發(fā)送線程和Socket接收線程,下面對這3個線程作具體介紹:
①串口接收線程。以阻塞的方式接收“UART_RX_IRQ_EVENT”事件,接收到此事件后,從串口環(huán)形接收緩沖中解析串口幀,當(dāng)有數(shù)據(jù)幀需要向以太網(wǎng)發(fā)送時,便將該數(shù)據(jù)幀的首地址以郵件的方式給Socket發(fā)送線程。而在RT_Thread中,郵件的存儲方式本質(zhì)是雙向循環(huán)隊列。
②Socket發(fā)送線程。以阻塞的方式接收來自串口接收線程的指針郵件,接收到此類郵件后,Socket發(fā)送線程將指針指向的數(shù)據(jù)封裝成Socket幀發(fā)送。
③Socket接收線程。用于從以太網(wǎng)接收數(shù)據(jù),并緩存解析數(shù)據(jù)幀,調(diào)用串口發(fā)送接口函數(shù),將收到的數(shù)據(jù)幀封裝成串口幀并插入串口發(fā)送隊列。
串口收/發(fā)工作于中斷方式,可以連續(xù)發(fā)送串口發(fā)送隊列中緩存的待發(fā)送幀和從串口接收字節(jié)數(shù)據(jù)并寫入串口的環(huán)形接收緩存。在接收到等于EFD的字節(jié)時,向串口接收線程發(fā)送一個“UART_RX_IRQ_EVENT”事件,通知串口接收線程環(huán)形緩存中可能存在一個完整的幀。
串口幀發(fā)送完畢后等待確認(rèn)幀的時間計時使用了RT-Thrcad提供的定時器,并且在定時器的超時函數(shù)中處理幀重發(fā)問題。
在軟件實現(xiàn)過程中遇到了一個問題:在RT-Thread操作系統(tǒng)的中斷程序中不能申請和釋放動態(tài)內(nèi)存,而串口中斷發(fā)送程序往發(fā)送完一個幀后,如果該幀是確認(rèn)幀或非確認(rèn)幀但達(dá)到了最大發(fā)送次數(shù),那么需要從待發(fā)送隊列刪除該幀并釋放對應(yīng)的動態(tài)內(nèi)存。這就存在矛盾,系統(tǒng)小能提供中斷程序釋放內(nèi)存的功能,但實際應(yīng)用又需要此功能。
為此,程序中專門設(shè)置了一個刪除隊列,當(dāng)中斷程序需要釋放發(fā)送幀時,將對應(yīng)幀插入刪除隊列,并向串口接收線程發(fā)送一個刪除事件“UART_TX_DEL_EVENT”,在串口接收線程中接收到此事件后再來釋放隊列中的幀,這就避免了在串口發(fā)送中斷程序中直接釋放動態(tài)內(nèi)存。
2.2.2 硬件相關(guān)
在硬件方面,為提高串口通信的可靠性,也做了相應(yīng)處理。
S3C2440微處理器的串口具有兩種工作模式:非FIFO模式和FIFO模式。在FIFO模式中,串口發(fā)送和接收分別具有64字節(jié)的硬件FIFO緩沖,使用硬件緩沖,能顯著地減少串口發(fā)送和接收中斷產(chǎn)生的次數(shù),進(jìn)而減小止常程序被中斷的頻率,提高系統(tǒng)性能。并且使用接收FIFO后,在處理器不能及時跳轉(zhuǎn)到串口接收中斷程序的情況下,由于硬件FIFO的存在,使得串口數(shù)據(jù)丟失的可能性減小。所以,網(wǎng)關(guān)中S3C2440微處理器的串口使用了FIFO模式。
另外,S3C2440微處理器的串口還具有硬件自動流控制功能,當(dāng)與網(wǎng)關(guān)相連的串口設(shè)備也具有硬件自動流控制功能時,開啟此功能。在開啟此功能的情況下,當(dāng)通信的某一端不能及時讀取接收緩沖中的數(shù)據(jù)時,硬件自動流控制能自動暫停另一端串口的數(shù)據(jù)發(fā)送,以防止數(shù)據(jù)的丟失。
在網(wǎng)關(guān)的軟件實現(xiàn)中,確認(rèn)機(jī)制的開關(guān)、確認(rèn)超時時間、重發(fā)次數(shù)、隊列容量、緩沖的大小、串口的FIFO設(shè)置和硬件流控制的開關(guān)等都是可配置的,針塒不同的應(yīng)用可以非常容易地做出合適的裁剪和設(shè)置。
結(jié)語
目前該網(wǎng)關(guān)被用于一個無線體溫監(jiān)測項目,以連接本地?zé)o線傳感網(wǎng)絡(luò)和遠(yuǎn)程數(shù)據(jù)庫服務(wù)器,實現(xiàn)本地設(shè)備對遠(yuǎn)程數(shù)據(jù)庫服務(wù)器的訪問,通過實際運行實驗,網(wǎng)關(guān)能很好地實現(xiàn)本文講述的功能。當(dāng)然,網(wǎng)關(guān)仍然有不盡完善之處,比如對有些公共資源的訪問沒有提供競爭保護(hù)機(jī)制,可能會影響網(wǎng)關(guān)運行的穩(wěn)定性和可靠性,有待今后進(jìn)一步完善。
tcp/ip相關(guān)文章:tcp/ip是什么
評論