新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 可移植的嵌入式WEB服務(wù)器軟件設(shè)計(jì)

可移植的嵌入式WEB服務(wù)器軟件設(shè)計(jì)

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

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

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

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

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

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

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

6)中斷管理,屏蔽不同硬件平臺(tái)對(duì)中斷處理上的差異;

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

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

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

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

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

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

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

1)建立連接:連接的建立是通過申請(qǐng)?zhí)捉幼謱?shí)現(xiàn)的。客戶打開一個(gè)套接字并把它綁定在一個(gè)端口上,如果成功,就可以通過這個(gè)套接字進(jìn)行數(shù)據(jù)收發(fā)了。

2)發(fā)送請(qǐng)求:打開一個(gè)連接后,客戶機(jī)把請(qǐng)求消息送到服務(wù)器的監(jiān)聽端口上,服務(wù)器讀取數(shù)據(jù),并從接收數(shù)據(jù)中識(shí)別請(qǐng)求動(dòng)作。HTTP/1.0 請(qǐng)求消息的典型格式為:

請(qǐng)求消息 = 請(qǐng)求行(通用信息|請(qǐng)求頭|實(shí)體頭) CRLF[實(shí)體內(nèi)容]

請(qǐng) 求 行 = 方法 請(qǐng)求URL HTTP版本號(hào) CRLF

方 法 = GET|HEAD|POST|擴(kuò)展方法

URL = 協(xié)議名稱+宿主名+目錄與文件名

如: GET http://192.168.1.1/index.htm HTTP/1.0

3)發(fā)送響應(yīng):服務(wù)器在處理完客戶的請(qǐng)求之后,要向客戶機(jī)發(fā)送響應(yīng)消息。HTTP/1.0的響應(yīng)消息格式如下:

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

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

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

1××   保留

2××   表示請(qǐng)求成功地接收

3××   為完成請(qǐng)求,客戶需進(jìn)一步細(xì)化請(qǐng)求

4××   客戶錯(cuò)誤

5××   服務(wù)器錯(cuò)誤

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

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



評(píng)論


相關(guān)推薦

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

關(guān)閉