新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 可移植的嵌入式WEB服務器軟件設計

可移植的嵌入式WEB服務器軟件設計

作者: 時間:2012-03-26 來源:網(wǎng)絡 收藏

這種結(jié)構(gòu)下操作系統(tǒng)服務函數(shù)一般不會被直接調(diào)用,而是將其包裝到一個“操作系統(tǒng)適配層”的庫中,把核心功能模塊與操作系統(tǒng)隔離開來,無論是更改底層的操作系統(tǒng),還是上層的應用界面,核心功能模塊都可以做到最大限度的源代碼級兼容,當整個軟件需要移植到其他操作系統(tǒng)時,只要簡單地移植操作系統(tǒng)適配層,即可保證核心模塊能夠正確的在新環(huán)境下運行,實現(xiàn)項目之間核心模塊的代碼共享,并共同享有測試、升級和維護工作的結(jié)果。這種基于中間件的設計技術(shù)可以廣泛的應用在協(xié)議和事務軟件的編寫過程中,歸納起來作為操作系統(tǒng)適配層的中間件應該包括以下幾個方面的功能:

1)任務管理,任務管理是操作系統(tǒng)的基本功能,包括創(chuàng)建任務、讀取和設置任務的優(yōu)先級、修改和檢查任務的狀態(tài);

2)內(nèi)存管理,嵌入式軟件由于硬件的特殊性,使得內(nèi)存的使用不能象Windows程序那樣隨意申請,同時也很難申請到大塊連續(xù)內(nèi)存,中間件內(nèi)存管理實現(xiàn)的功能就是將一些小的內(nèi)存塊預先分配下來,作為一個內(nèi)存池供應用程序使用,這些小的內(nèi)存塊可以進行拼接,最終形成應用程序需要的緩沖區(qū);

3)消息管理,主要作用是為不同操作系統(tǒng)的消息處理提供統(tǒng)一的外部接口,應用程序只需要按照中間件規(guī)定的模式進行消息收發(fā)即可;

4)任務間同步,中間件應為多任務環(huán)境提供同步機制,可以采用底層操作系統(tǒng)的互斥量、信號量等;

5)定時管理,通過操作系統(tǒng)提供的單一定時器,實現(xiàn)應用程序的一些定時需求;

6)中斷管理,屏蔽不同硬件平臺對中斷處理上的差異;

7)網(wǎng)絡接口管理,屏蔽不同系統(tǒng)之間網(wǎng)絡操作的差異;

8)其他功能: 包括總線數(shù)據(jù)讀寫、錯誤處理和可利用資源管理等;

2、基于中間件的嵌入式軟件

在工業(yè)監(jiān)控應用領(lǐng)域,選擇構(gòu)架的監(jiān)控系統(tǒng)是非適合的,因為它不僅可以實現(xiàn)監(jiān)控的目的,而且可以統(tǒng)一操作維護界面。在這種系統(tǒng)中,需要使用運行在現(xiàn)場的設備作為,在控制室則通過瀏覽器來查看現(xiàn)場的情況,還可以通過WEB服務器的CGI等接口,對現(xiàn)場設備進行人為的控制。

WEB服務器采用HTTP協(xié)議與客戶端瀏覽器進行信息交互,通過服務器應用程序可以實現(xiàn)對遠程設備的訪問和控制。HTTP是應用層的協(xié)議,它于1990年提出,經(jīng)過多年的使用與發(fā)展,得到了不斷地完善和發(fā)展。

HTTP協(xié)議是基于請求/響應模式的,客戶機與服務器建立連接后,發(fā)送一個請求給服務器,請求的格式為:統(tǒng)一資源標識符、協(xié)議版本號,后邊是 MIME信息(包括請求修飾符、客戶機信息和可能的內(nèi)容)。服務器接收到請求后,會給予相應的響應信息,其格式為一個狀態(tài)行(包括信息的協(xié)議版本號、一個成功或錯誤的代碼),后邊是MIME信息(包括服務器信息、實體信息和可能的內(nèi)容)。

在WEB服務器中,客戶與服務器是一個相對的概念,只存在于一個特定的連接期間,即在某個連接中的客戶在另一個連接中可能作為服務器。WEB服務器運行時,一直在TCP80端口(WEB服務器的缺省端口)監(jiān)聽,等待連接的出現(xiàn)。下面是WEB服務器通過HTTP協(xié)議進行信息交換的步驟:

1)建立連接:連接的建立是通過申請?zhí)捉幼謱崿F(xiàn)的??蛻舸蜷_一個套接字并把它綁定在一個端口上,如果成功,就可以通過這個套接字進行數(shù)據(jù)收發(fā)了。

2)發(fā)送請求:打開一個連接后,客戶機把請求消息送到服務器的監(jiān)聽端口上,服務器讀取數(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ā)送響應:服務器在處理完客戶的請求之后,要向客戶機發(fā)送響應消息。HTTP/1.0的響應消息格式如下:

響應消息 = 狀態(tài)行(通用信息頭|響應頭|實體頭) CRLF [實體內(nèi)容]

狀 態(tài) 行 = HTTP版本號 狀態(tài)碼 原因敘述

狀態(tài)碼表示響應類型

1××   保留

2××   表示請求成功地接收

3××   為完成請求,客戶需進一步細化請求

4××   客戶錯誤

5××   服務器錯誤

4)關(guān)閉連接:通訊結(jié)束后,客戶和服務器雙方都可以通過關(guān)閉套接字來結(jié)束TCP/IP對話。

在具體的嵌入式WEB服務器軟件中,除了受制于目標硬件有限的資源外,還有一個限制就是對文件系統(tǒng)的支持上,因為并不是所有的目標設備都會采用文件系統(tǒng),唯一可以肯定的就是中一定會有非遺失性存儲器,如FLASH,這樣在設計嵌入式WEB服務器時,需要提供一種工具,將多個WEB網(wǎng)頁文件轉(zhuǎn)換成一個數(shù)組,并在WEB服務器中建立索引,當請求某個網(wǎng)頁文件時,通過這個索引來查找對應的文件數(shù)據(jù),并發(fā)送出去。嵌入式WEB服務器軟件大致可以分為四個部分:通訊模塊、HTTP請求處理模塊、ROM文件系統(tǒng)、CGI接口模塊。下面是嵌入式WEB服務器軟件的模塊結(jié)構(gòu)圖:



評論


相關(guān)推薦

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

關(guān)閉