可移植的嵌入式WEB服務(wù)器軟件設(shè)計(jì)
引言
隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,嵌入式WEB服務(wù)器技術(shù)在工業(yè)生產(chǎn)的過(guò)程控制、環(huán)境監(jiān)測(cè)以及遠(yuǎn)程數(shù)據(jù)采集等方面得到了廣泛的應(yīng)用,通過(guò)嵌入在目標(biāo)設(shè)備中的WEB服務(wù)器,可以非常方便地獲取遠(yuǎn)程數(shù)據(jù),并實(shí)現(xiàn)對(duì)遠(yuǎn)程設(shè)備的干預(yù),達(dá)到對(duì)遠(yuǎn)程現(xiàn)場(chǎng)進(jìn)行監(jiān)視和控制的目的。在實(shí)際系統(tǒng)中,遠(yuǎn)程設(shè)備往往千差萬(wàn)別,為了在這些目標(biāo)設(shè)備中構(gòu)建WEB服務(wù)器,必須針對(duì)不同的系統(tǒng)編寫(xiě)相應(yīng)的WEB服務(wù)器代碼,通過(guò)采用基于操作系統(tǒng)適配層的中間件技術(shù),可以很好的解決WEB服務(wù)器軟件在不同系統(tǒng)之間的移植問(wèn)題,同時(shí)改善軟件的可維護(hù)性。
1、嵌入式軟件的可移植問(wèn)題
可移植性主要指把同一軟件放置到不同系統(tǒng)平臺(tái)(如不同的硬件平臺(tái)或操作系統(tǒng))并使之正常運(yùn)行的難易程度,可移植性有時(shí)候被表述為跨平臺(tái)性,軟件的可移植性主要涉及到上面提到的軟硬件運(yùn)行環(huán)境。開(kāi)發(fā)出來(lái)的程序,如果不用修改或只需極少量的修改便能在其它種類的計(jì)算機(jī)上運(yùn)行,就是可移植性好的程序。在當(dāng)今的軟件設(shè)計(jì)中,為了在不同的產(chǎn)品線上重復(fù)使用相同的代碼,經(jīng)常需要將代碼從一個(gè)平臺(tái)移植到另一個(gè)平臺(tái),這種代碼的重復(fù)利用非常重要,因?yàn)樗梢钥s短軟件開(kāi)發(fā)和測(cè)試的周期,同時(shí)還能減少后期的維護(hù)工作。
計(jì)算機(jī)軟件的運(yùn)行環(huán)境有兩個(gè)方面——硬件環(huán)境和軟件環(huán)境。硬件環(huán)境主要涉及計(jì)算機(jī)的硬件體系結(jié)構(gòu),比如X86體系結(jié)構(gòu)、ARM體系結(jié)構(gòu)、MIPS體系結(jié)構(gòu)等,不同的體系結(jié)構(gòu)其指令系統(tǒng)、中斷處理、寄存器組織、總線讀寫(xiě)等都存在一定的差別;軟件環(huán)境指的是軟件依賴的操作系統(tǒng)。嵌入式應(yīng)用需求多樣,操作系統(tǒng)種類也非常豐富,常見(jiàn)的有 VxWorks、Nucleus、WinCE、Linux/uClinux、eCos、uC/OS-II、ThreadX、Hopen和Delta等,不同的操作系統(tǒng)都會(huì)提供一些系統(tǒng)服務(wù),比如任務(wù)創(chuàng)建和管理、任務(wù)間件通訊等,但各個(gè)操作系統(tǒng)在具體實(shí)現(xiàn)時(shí)會(huì)存在一些差異,其對(duì)外提供的系統(tǒng)服務(wù)接口也有不同,比如創(chuàng)建任務(wù)的系統(tǒng)調(diào)用:VxWorks為taskSpawn,Nucleus為NU_Create_Task,為了編寫(xiě)具有最廣泛適應(yīng)性的可移植代碼,開(kāi)發(fā)人員必須注意到這些差異,并且采取適當(dāng)?shù)牟呗?,?lái)開(kāi)發(fā)具有良好可移植性的軟件,使用一個(gè)稱為操作系統(tǒng)適配層的中間件可以很好的解決這個(gè)問(wèn)題。
中間件(Middleware)是位于平臺(tái)(硬件、操作系統(tǒng))和應(yīng)用程序之間的一組通用服務(wù),這些服務(wù)具有標(biāo)準(zhǔn)的程序接口和協(xié)議,針對(duì)不同的操作系統(tǒng)和硬件平臺(tái),它們可以有符合接口和協(xié)議規(guī)范的多種實(shí)現(xiàn)?;谥虚g件模型,需要對(duì)軟件模塊進(jìn)行一下簡(jiǎn)單的重構(gòu):界面與功能模塊分離,在模塊化的軟件中,界面要求以獨(dú)立的模塊出現(xiàn),它與功能模塊之間可以根據(jù)具體的情況采用API調(diào)用或者消息等通訊機(jī)制來(lái)進(jìn)行交互,這樣在進(jìn)行界面修改時(shí)可以不修改軟件的其他部分;同時(shí)功能模塊不直接調(diào)用操作系統(tǒng)的服務(wù)函數(shù),而是調(diào)用中間件提供的處理函數(shù),通過(guò)中間件實(shí)現(xiàn)與操作系統(tǒng)、硬件以及人機(jī)界面之間的交互,這樣整個(gè)軟件的框架就變成如下結(jié)構(gòu):
基于中間件的軟件結(jié)構(gòu)圖
評(píng)論