實(shí)時(shí)內核μC/OS-II下的網(wǎng)絡(luò )監控系統的設計
隨著(zhù)信息時(shí)代的到來(lái),特別是互聯(lián)網(wǎng)的迅速普及,人們開(kāi)始越來(lái)越多地接觸到一個(gè)新概念——嵌入式產(chǎn)品。將嵌入式系統接入Internet,不僅實(shí)現了設備的遠程控制、維護和升級,而且可實(shí)現資源共享。通過(guò)網(wǎng)絡(luò )對設備進(jìn)行監控,一個(gè)外部界面是必不可少的,利用Web瀏覽器可使用戶(hù)通過(guò)網(wǎng)絡(luò )對遠程系統實(shí)現管理和更新,大大簡(jiǎn)化了人機界面的設計。若在系統中嵌入實(shí)時(shí)操作系統,將使系統具有極強的可移植性,另外,硬件設備的添加與裁剪也具有極大的靈活性。采用DHCP協(xié)議動(dòng)態(tài)獲得IP相關(guān)信息,使TCP/IP軟件不再依賴(lài)于存儲在芯片中的固定IP地址,這將為大型系統的安裝提供方便條件。
本文引用地址:http://dyxdggzs.com/article/86626.htm本設計的關(guān)鍵是如何在內存資源有限的單片機系統上,利用實(shí)時(shí)內核μC/OS-II把信息變成可以在互聯(lián)網(wǎng)上傳輸的IP數據包,以便通過(guò)IE瀏覽器監控遠程設備的狀態(tài)。
1 網(wǎng)絡(luò )監控系統概述
本設計采用Internet監控遠程設備,整個(gè)系統相當于一個(gè)網(wǎng)絡(luò )服務(wù)器??蛻?hù)端通過(guò)IE瀏覽器對該服務(wù)器進(jìn)行訪(fǎng)問(wèn),實(shí)時(shí)地獲得設備的狀態(tài)信息,以便對設備進(jìn)行控制和維護。這樣,就要求服務(wù)器提供WWW服務(wù),即實(shí)現HTTP協(xié)議。它應被所有瀏覽器支持,以保證任何地方的用戶(hù)都可通過(guò)瀏覽器下達命令。在網(wǎng)絡(luò )接口上,本系統選擇以太網(wǎng)為其運行的網(wǎng)絡(luò )環(huán)境。圖1所示為HTTP設計模型。首先,客戶(hù)端的瀏覽器與Web服務(wù)器使用一個(gè)或多個(gè)TCP連接,通過(guò)80號端口進(jìn)行通信,瀏覽器通過(guò)HTTP協(xié)議瀏覽事先存儲在EEROM中的控制網(wǎng)頁(yè),通過(guò)該網(wǎng)頁(yè)傳遞控制命令到網(wǎng)絡(luò )服務(wù)器,然后服務(wù)器對命令進(jìn)行解析,調用相應的函數以控制外部I/O設備。
整個(gè)網(wǎng)絡(luò )監控系統包括硬件和軟件兩部分。在硬件部分嵌入了TCP/IP協(xié)議棧。因系統資源有限,在保持協(xié)議分層體系結構的前提下,應盡量精簡(jiǎn)協(xié)議內容。根據網(wǎng)絡(luò )監控系統的原理,本系統實(shí)現了以下協(xié)議:DHCP、HTTP、TCP、IP、ICMP、ARP。
2 硬件平臺設計
本設計采用以太網(wǎng)作為網(wǎng)絡(luò )的運行環(huán)境,在硬件上需要有網(wǎng)絡(luò )控制芯片。目前市面上有許多以太網(wǎng)絡(luò )控制芯片,但其大多數都耗電量高、功能復雜,不適合用于價(jià)格低廉的嵌入式系統中。在這里選用RTL8019AS[1],其好處是NE2000兼容、軟件移植性好、接口簡(jiǎn)單、不需轉換芯片如PCI-ISA橋等。而單片機選擇89C55,它有20K的ROM,內部結構簡(jiǎn)單,只要代碼能夠移植于它,就能較輕松地移植于其它架構的CPU,比如ARM等。圖2為硬件原理框圖。24C64用來(lái)存儲物理地址及設備的相關(guān)信息等;外部RAM為數據處理提供緩存。系統提供了RS232接口用來(lái)進(jìn)行測試,提供了RJ45接口以便連接到以太網(wǎng)。
3 操作系統的選擇
根據監控系統的特點(diǎn),系統必須滿(mǎn)足實(shí)時(shí)性和并發(fā)性的要求,以便更好地支持TCP/IP運行時(shí)的調度,所以應用軟件應該基于嵌入式實(shí)時(shí)操作系統。適合于片上的實(shí)時(shí)操作系統比較多,但是代碼公開(kāi)且適合移植于51系列單片機的卻很少,主要有μC/OS-II、RTX51、Small RTOS51等。實(shí)時(shí)內核μC/OS-II是專(zhuān)門(mén)為單片機嵌入式應用而設計的,圖3為嵌入式實(shí)時(shí)操作系統的內部結構圖。它主要采用標準的ANSI C語(yǔ)言寫(xiě)成,與硬件有關(guān)的部分使用匯編語(yǔ)言編寫(xiě),以使操作系統能很方便地移植到其它的處理器??梢?jiàn),使用嵌入式操作系統時(shí),應用軟件只與上層的代碼有關(guān)而與處理器無(wú)關(guān),在進(jìn)行軟件移植時(shí)僅需對與硬件相關(guān)的底層函數進(jìn)行修改,因此這樣的應用軟件具有良好的可移植性和穩定的可靠性。在μC/OS-II下編寫(xiě)TCP/IP協(xié)議,比傳統的前后臺系統要方便很多;用它分配內存緩沖區,使用前申請,使用后釋放,可有效地利用系統資源。在程序設計時(shí)將TCP/IP協(xié)議棧做成任務(wù),而用戶(hù)程序在另外的任務(wù)中運行。這樣,單片機可在完成原來(lái)控制系統功能的前提下,實(shí)現網(wǎng)絡(luò )通信。從代碼長(cháng)度上看, 實(shí)現基本功能的TCP/IP協(xié)議棧比Linux等其它操作系統優(yōu)勢更大。
4 軟件設計
軟件設計是網(wǎng)絡(luò )監控系統設計的重要部分,主要完成RTL8019AS的驅動(dòng)、μC/OS-II對應用系統的管理及TCP/IP協(xié)議棧的實(shí)現。
4.1 μC/OS-II操作系統的應用
μC/OS-II可以根據需要進(jìn)行相應裁剪后移植[2]到51單片機上。用它對系統進(jìn)行管理,使得程序易讀,且便于移植。μC/OS-II主要負責管理網(wǎng)卡初始化、創(chuàng )建系統資源、創(chuàng )建任務(wù)等三部分工作。在系統資源的創(chuàng )建上,使用TxSem、RxSem信號量[3]及TxQFIFO隊列[3]。當需要發(fā)送或接收數據時(shí),觸發(fā)RTL8019AS中斷,CPU將中斷向量進(jìn)入中斷服務(wù)子程序,進(jìn)行事件處理。中斷服務(wù)子程序根據RTL8019AS內部中斷狀態(tài)寄存器IMR的值確定系統所處狀態(tài),通過(guò)兩個(gè)信號量TxSemPost和RxSemPost切換系統任務(wù),使等待相應信號量的一個(gè)任務(wù)進(jìn)入就緒態(tài)。發(fā)送數據幀的過(guò)程是通過(guò)檢查信號量TxSemPost而進(jìn)行的相應處理,為了保證數據正確到達客戶(hù)端,這里采用了多次發(fā)送機制。當信號量RxSemPost到來(lái)時(shí),開(kāi)始接收數據。如果數據幀正確,就根據數據包的大小申請合適的內存空間存放該數據,然后根據接收幀的目的地址的正確與否決定是否將該幀提交給上層應用程序。若無(wú)誤則解析數據報頭,進(jìn)行相應處理。
4.2 RTL8019驅動(dòng)
RTL8019AS完成數據包和電信號之間的相互轉換。驅動(dòng)程序主要包括芯片初始化、收包、發(fā)包三部分。物理信道上的收發(fā)操作采用以太網(wǎng)協(xié)議802.3幀格式[4]。系統收發(fā)數據包的原理是單片機先將待發(fā)送的數據包存入RTL8019芯片RAM,給出發(fā)送緩沖區首地址和數據包長(cháng)度(寫(xiě)入TPSR、TBCR0,1)后,啟動(dòng)發(fā)送命令(CR=0x3E),即可實(shí)現RTL8019的發(fā)送功能。RTL8019會(huì )自動(dòng)按以太網(wǎng)協(xié)議完成發(fā)送并將結果寫(xiě)入狀態(tài)寄存器。RTL8019芯片接收緩沖區構成一個(gè)循環(huán)FIFO隊列,PSTART、PSTOP兩個(gè)寄存器限定了循環(huán)隊列的開(kāi)始和結束頁(yè),CURR為寫(xiě)入指針,受芯片控制,BNRY為讀出指針,由主機程序控制。根據CURR==BNRY+1?可以判斷出是否收到新的數據包,新收到的數據包存于以CURR指出的地址為首址的RAM中。當CURR==BNRY時(shí),芯片停止接收數據包。
4.3 網(wǎng)絡(luò )協(xié)議棧的實(shí)現
基于TCP/IP協(xié)議可以實(shí)現多種功能,本文主要討論HTTP協(xié)議[5],也就是Web服務(wù)器在應用層的主要構成協(xié)議。由于TCP/IP協(xié)議棧本身是一種層式結構,所以在協(xié)議棧的設計上采用模塊化思想,逐層實(shí)現,然后通過(guò)對各層接口函數的調用實(shí)現完整的協(xié)議棧。實(shí)現TCP/IP協(xié)議棧的大致流程如圖4所示。
要想將嵌入式系統作為一個(gè)終端并用TCP/IP連接起來(lái),就必須設定IP地址、網(wǎng)關(guān)和子網(wǎng)掩碼等信息。為了增強系統的靈活性,需要一種自動(dòng)配置能力,即系統自動(dòng)從中心服務(wù)器獲得IP地址等信息。實(shí)現這一功能的標準方法是通過(guò)主機動(dòng)態(tài)配置協(xié)議(DHCP)[5]。DHCP是基于UDP層之上的應用,采用端口68和67以廣播的形式進(jìn)行通訊,它的工作主要包括探查、賦予、請求、確認等操作。
HTTP協(xié)議選擇定義請求-應答機制獲得Web服務(wù)器上的文件。當用戶(hù)訪(fǎng)問(wèn)Web服務(wù)器中的網(wǎng)頁(yè)時(shí),一個(gè)HTTP請求就會(huì )以多行字符串的形式從瀏覽器發(fā)送到Web服務(wù)器,第一行指定一個(gè)方法GET,后面跟著(zhù)一串參數。服務(wù)器對客戶(hù)端的應答需包含HTTP報文頭,如果請求成功,還包括文檔本身,這些信息沿TCP連接發(fā)送,直至傳送完成斷開(kāi)連接。含最少量信息的報文頭包含成功或失敗狀態(tài)及傳輸文檔的內容類(lèi)型(文本、HTML、GIF圖形等)。所有連接的相關(guān)信息如IP地址、客戶(hù)端口號、序列號、應答號及TCP狀態(tài)等被放入一個(gè)結構體,結構體的每個(gè)元素均可看作一個(gè)連接狀態(tài)。服務(wù)器進(jìn)程關(guān)閉連接表示本次響應結束。網(wǎng)頁(yè)信息以HTML文本格式存儲于EEROM中,Web服務(wù)器創(chuàng )建局部變量以匹配文檔中的特殊字符,這些信息通過(guò)HTTP協(xié)議沿TCP連接發(fā)送到瀏覽器,服務(wù)器在應答文檔中碰到合適的字符,就替換一個(gè)變量值,實(shí)現動(dòng)態(tài)網(wǎng)頁(yè)。
為了在服務(wù)器和客戶(hù)端之間傳遞HTTP請求和應答信息,需要一個(gè)可靠的通信信道,這由傳輸控制協(xié)議TCP提供。TCP提供一種面向連接的可靠的數據流服務(wù),它的主要任務(wù)是創(chuàng )建進(jìn)程到進(jìn)程的通信。數據傳輸分三個(gè)階段進(jìn)行:建立連接、傳輸數據、斷開(kāi)連接,實(shí)現起來(lái)相對復雜。由于嵌入式系統是服務(wù)器端,總是對客戶(hù)的連接請求給予響應,從不主動(dòng)發(fā)起連接請求,因此只要在保證嵌入式系統能夠對TCP分組進(jìn)行正確響應的前提下,就可以對TCP協(xié)議進(jìn)行大幅度簡(jiǎn)化。嵌入式系統總是響應客戶(hù)連接,始終是被動(dòng)地打開(kāi)連接,所以只需為建立連接過(guò)程中的嵌入式系統提供 LISTEN、SYN_RCVD兩種狀態(tài)即可。雖然比標準狀態(tài)變遷圖中缺少了CLOSED、SYN_SENT狀態(tài),但LISTEN、SYN_RCVD足以描述系統建立連接時(shí)的狀態(tài)。當系統在傳最后一個(gè)數據包時(shí),設置FIN,要求終止當前連接。連接主動(dòng)關(guān)閉和同時(shí)關(guān)閉兩種情況都是可能發(fā)生的,因此只需為系統提供主動(dòng)關(guān)閉和同時(shí)關(guān)閉涉及到的狀態(tài)即可。
為了在主機之間傳遞TCP段,需要實(shí)現IP協(xié)議。IP協(xié)議的實(shí)現比較復雜,但是從實(shí)現Web服務(wù)器這一特定的要求出發(fā),主要需把握如下兩點(diǎn)設計思想:第一,對接收到的IP數據報進(jìn)行處理,向上層協(xié)議進(jìn)行提交;第二,負責對TCP報文、ICMP報文進(jìn)行封裝,交給數據鏈路層進(jìn)行裝幀。實(shí)際上這是IP協(xié)議最基本的功能,也是Web服務(wù)器在網(wǎng)絡(luò )層必需的功能。ICMP協(xié)議負責傳遞差錯報文及其它需要注意的信息, Ping利用ICMP協(xié)議的回響功能實(shí)現主機/服務(wù)器是否有應答的測試。Ping的實(shí)現主要由ping請求、ping應答和回顯操作三個(gè)函數完成。
由于采用以太網(wǎng)的接入方式,因此系統必須實(shí)現IEEE802.3標準,主要由RTL8019AS完成。為了保證系統在以太網(wǎng)的通信,還需要實(shí)現ARP協(xié)議。ARP協(xié)議的本質(zhì)就是完成網(wǎng)絡(luò )地址到物理地址的映射,從而保證網(wǎng)絡(luò )的正確傳輸。整個(gè)ARP處理過(guò)程由ARP請求、ARP應答、ARP處理三個(gè)函數實(shí)現,ARP處理函數建立了ARP緩存表。
本文介紹的嵌入式網(wǎng)絡(luò )監控系統采用IE瀏覽器作為客戶(hù)端界面,支持RS232和以太網(wǎng)的連接,可以通過(guò)以太網(wǎng)接入Internet,進(jìn)而實(shí)現從Internet上監控嵌入式設備。在實(shí)際應用中,如果I/O口連接了其它硬件設備,只需對變量的處理函數做相應改動(dòng),就可實(shí)現遠程監控。系統內部嵌入μC/OS-II操作系統,使用靈活,可通過(guò)編程增加需要的功能。采用DHCP動(dòng)態(tài)獲得IP地址等信息,增強了系統的靈活性。本方案所實(shí)現的網(wǎng)絡(luò )監控系統具有成本低、可視化、與平臺無(wú)關(guān)等特點(diǎn),可以廣泛應用在工業(yè)控制領(lǐng)域,有很高的實(shí)用價(jià)值。
參考文獻
1 REALTEK Datasheet.RTL8019AS RealPNP[J], 2000
2 μCOS51移植心得.http://www.armecos.com
3邵貝貝. 嵌入式實(shí)時(shí)操作系統μCOS-II. 北京:北京航空航天大學(xué)出版社,2003
4楊 屹.NE2000網(wǎng)卡芯片驅動(dòng)程序.巨龍公司系統集成開(kāi)發(fā)部,2002
5陳向群譯.嵌入式系統Web服務(wù)器——TCP/IP Lean. 北京:機械工業(yè)出版社,2003:187~214,425~440
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
tcp/ip相關(guān)文章:tcp/ip是什么
評論