可移植的嵌入式WEB服務(wù)器軟件設(shè)計
這種結(jié)構(gòu)下操作系統(tǒng)服務(wù)函數(shù)一般不會被直接調(diào)用,而是將其包裝到一個“操作系統(tǒng)適配層”的庫中,把核心功能模塊與操作系統(tǒng)隔離開來,無論是更改底層的操作系統(tǒng),還是上層的應(yīng)用界面,核心功能模塊都可以做到最大限度的源代碼級兼容,當(dāng)整個軟件需要移植到其他操作系統(tǒng)時,只要簡單地移植操作系統(tǒng)適配層,即可保證核心模塊能夠正確的在新環(huán)境下運行,實現(xiàn)項目之間核心模塊的代碼共享,并共同享有測試、升級和維護工作的結(jié)果。這種基于中間件的設(shè)計技術(shù)可以廣泛的應(yīng)用在協(xié)議和事務(wù)軟件的編寫過程中,歸納起來作為操作系統(tǒng)適配層的中間件應(yīng)該包括以下幾個方面的功能:
1)任務(wù)管理,任務(wù)管理是操作系統(tǒng)的基本功能,包括創(chuàng)建任務(wù)、讀取和設(shè)置任務(wù)的優(yōu)先級、修改和檢查任務(wù)的狀態(tài);
2)內(nèi)存管理,嵌入式軟件由于硬件的特殊性,使得內(nèi)存的使用不能象Windows程序那樣隨意申請,同時也很難申請到大塊連續(xù)內(nèi)存,中間件內(nèi)存管理實現(xiàn)的功能就是將一些小的內(nèi)存塊預(yù)先分配下來,作為一個內(nèi)存池供應(yīng)用程序使用,這些小的內(nèi)存塊可以進行拼接,最終形成應(yīng)用程序需要的緩沖區(qū);
3)消息管理,主要作用是為不同操作系統(tǒng)的消息處理提供統(tǒng)一的外部接口,應(yīng)用程序只需要按照中間件規(guī)定的模式進行消息收發(fā)即可;
4)任務(wù)間同步,中間件應(yīng)為多任務(wù)環(huán)境提供同步機制,可以采用底層操作系統(tǒng)的互斥量、信號量等;
5)定時管理,通過操作系統(tǒng)提供的單一定時器,實現(xiàn)應(yīng)用程序的一些定時需求;
6)中斷管理,屏蔽不同硬件平臺對中斷處理上的差異;
7)網(wǎng)絡(luò)接口管理,屏蔽不同系統(tǒng)之間網(wǎng)絡(luò)操作的差異;
8)其他功能: 包括總線數(shù)據(jù)讀寫、錯誤處理和可利用資源管理等;
2、基于中間件的嵌入式WEB服務(wù)器軟件
在工業(yè)監(jiān)控應(yīng)用領(lǐng)域,選擇WEB服務(wù)器構(gòu)架的監(jiān)控系統(tǒng)是非適合的,因為它不僅可以實現(xiàn)監(jiān)控的目的,而且可以統(tǒng)一操作維護界面。在這種系統(tǒng)中,需要使用運行在現(xiàn)場的設(shè)備作為WEB服務(wù)器,在控制室則通過瀏覽器來查看現(xiàn)場的情況,還可以通過WEB服務(wù)器的CGI等接口,對現(xiàn)場設(shè)備進行人為的控制。
WEB服務(wù)器采用HTTP協(xié)議與客戶端瀏覽器進行信息交互,通過服務(wù)器應(yīng)用程序可以實現(xiàn)對遠程設(shè)備的訪問和控制。HTTP是應(yīng)用層的協(xié)議,它于1990年提出,經(jīng)過多年的使用與發(fā)展,得到了不斷地完善和發(fā)展。
HTTP協(xié)議是基于請求/響應(yīng)模式的,客戶機與服務(wù)器建立連接后,發(fā)送一個請求給服務(wù)器,請求的格式為:統(tǒng)一資源標(biāo)識符、協(xié)議版本號,后邊是 MIME信息(包括請求修飾符、客戶機信息和可能的內(nèi)容)。服務(wù)器接收到請求后,會給予相應(yīng)的響應(yīng)信息,其格式為一個狀態(tài)行(包括信息的協(xié)議版本號、一個成功或錯誤的代碼),后邊是MIME信息(包括服務(wù)器信息、實體信息和可能的內(nèi)容)。
在WEB服務(wù)器中,客戶與服務(wù)器是一個相對的概念,只存在于一個特定的連接期間,即在某個連接中的客戶在另一個連接中可能作為服務(wù)器。WEB服務(wù)器運行時,一直在TCP80端口(WEB服務(wù)器的缺省端口)監(jiān)聽,等待連接的出現(xiàn)。下面是WEB服務(wù)器通過HTTP協(xié)議進行信息交換的步驟:
1)建立連接:連接的建立是通過申請?zhí)捉幼謱崿F(xiàn)的??蛻舸蜷_一個套接字并把它綁定在一個端口上,如果成功,就可以通過這個套接字進行數(shù)據(jù)收發(fā)了。
2)發(fā)送請求:打開一個連接后,客戶機把請求消息送到服務(wù)器的監(jiān)聽端口上,服務(wù)器讀取數(shù)據(jù),并從接收數(shù)據(jù)中識別請求動作。HTTP/1.0 請求消息的典型格式為:
請求消息 = 請求行(通用信息|請求頭|實體頭) CRLF[實體內(nèi)容]
請 求 行 = 方法 請求URL HTTP版本號 CRLF
方 法 = GET|HEAD|POST|擴展方法
URL = 協(xié)議名稱+宿主名+目錄與文件名
如: GET http://192.168.1.1/index.htm HTTP/1.0
3)發(fā)送響應(yīng):服務(wù)器在處理完客戶的請求之后,要向客戶機發(fā)送響應(yīng)消息。HTTP/1.0的響應(yīng)消息格式如下:
響應(yīng)消息 = 狀態(tài)行(通用信息頭|響應(yīng)頭|實體頭) CRLF [實體內(nèi)容]
狀 態(tài) 行 = HTTP版本號 狀態(tài)碼 原因敘述
狀態(tài)碼表示響應(yīng)類型
1×× 保留
2×× 表示請求成功地接收
3×× 為完成請求,客戶需進一步細化請求
4×× 客戶錯誤
5×× 服務(wù)器錯誤
4)關(guān)閉連接:通訊結(jié)束后,客戶和服務(wù)器雙方都可以通過關(guān)閉套接字來結(jié)束TCP/IP對話。
在具體的嵌入式WEB服務(wù)器軟件中,除了受制于目標(biāo)硬件有限的資源外,還有一個限制就是對文件系統(tǒng)的支持上,因為并不是所有的目標(biāo)設(shè)備都會采用文件系統(tǒng),唯一可以肯定的就是嵌入式系統(tǒng)中一定會有非遺失性存儲器,如FLASH,這樣在設(shè)計嵌入式WEB服務(wù)器時,需要提供一種工具,將多個WEB網(wǎng)頁文件轉(zhuǎn)換成一個數(shù)組,并在WEB服務(wù)器中建立索引,當(dāng)請求某個網(wǎng)頁文件時,通過這個索引來查找對應(yīng)的文件數(shù)據(jù),并發(fā)送出去。嵌入式WEB服務(wù)器軟件大致可以分為四個部分:通訊模塊、HTTP請求處理模塊、ROM文件系統(tǒng)、CGI接口模塊。下面是嵌入式WEB服務(wù)器軟件的模塊結(jié)構(gòu)圖:
評論