面向?qū)ο蟮那度胧较到y(tǒng)開發(fā)技術(shù)
關(guān)鍵詞 嵌入式系統(tǒng) 面向?qū)ο筌浖?fù)用 設(shè)計(jì)模式
引 言
嵌入式系統(tǒng)不以獨(dú)立設(shè)備的物理形態(tài)出現(xiàn),嵌入式系統(tǒng)的部件根據(jù)主體設(shè)備以及應(yīng)用的需要.嵌入在主體設(shè)備內(nèi)部,發(fā)揮著運(yùn)算、處理、存儲(chǔ)以及控制等作用。從體系結(jié)構(gòu)看,嵌入式系統(tǒng)主要以嵌人式處理器、支撐硬件和嵌入式軟件組成。嵌入式系統(tǒng)的發(fā)展已有30多年的歷史,早期的嵌入式系統(tǒng)以單個(gè)芯片為核心,大部分應(yīng)用于工業(yè)控制系統(tǒng)中;后來(lái)發(fā)展為以嵌入式CPU為基礎(chǔ)、以嵌入式操作系統(tǒng)為核心的嵌入式系統(tǒng);進(jìn)入20世紀(jì)90年代以后,Internet的應(yīng)用迅速普及,廣泛滲透到社會(huì)、經(jīng)濟(jì)、交通、通信等相關(guān)行業(yè),計(jì)算機(jī)與通信一體化的趨勢(shì)日趨明顯?;贗nternet的嵌入式系統(tǒng)再度成為一個(gè)研究熱點(diǎn)。在人們的日常生活中,已經(jīng)普遍使用的手機(jī)、PDA、手持設(shè)備和掌上電腦等信息電器就是嵌入式系統(tǒng)應(yīng)用正在迅速發(fā)展的一個(gè)證明。
面向?qū)ο蟮幕舅枷刖褪浅绦虮豢醋魇窍嗷f(xié)作的對(duì)象集合,每個(gè)對(duì)象都是某個(gè)類的實(shí)例,所有的類構(gòu)成一個(gè)通過繼承關(guān)系相聯(lián)系的層次結(jié)構(gòu)。程序設(shè)計(jì)是以對(duì)象為中心,以消息為驅(qū)動(dòng)。程序一般由類的定義和類的使用組成。面向?qū)ο蟮慕?,就是把系統(tǒng)看作是相互協(xié)作的對(duì)象。這些對(duì)象是結(jié)構(gòu)和行為的封裝,都屬于某個(gè)類。那些類具有某種層次化的結(jié)構(gòu)。系統(tǒng)的所有功能通過對(duì)象之間相互發(fā)送消息來(lái)獲得。
面向?qū)ο蠹夹g(shù)有以下優(yōu)點(diǎn):
①維護(hù)簡(jiǎn)單。模塊化是面向?qū)ο缶幊讨械囊粋€(gè)特征。實(shí)體被表示為類和同一名字空間中具有相同功能的類,可以在名字空間中添加一個(gè)類而不會(huì)影響該名字空間的其他成員。
②可擴(kuò)充。面向?qū)ο缶幊虖谋举|(zhì)上支持?jǐn)U充性。如果有一個(gè)具有某種功能的類,就可以很快地?cái)U(kuò)充這個(gè)類,創(chuàng)建一個(gè)具有擴(kuò)充功能的類。
③代碼重用。由于功能是被封裝在類中的,并且類是作為一個(gè)獨(dú)立實(shí)體而存在的,提供一個(gè)標(biāo)準(zhǔn)類庫(kù)就非常簡(jiǎn)單。
面向?qū)ο蟮姆椒朔嗽熊浖到y(tǒng)規(guī)模龐大、研制周期長(zhǎng)、維護(hù)費(fèi)用高、軟件系統(tǒng)過于復(fù)雜、應(yīng)用軟件不易集成等困難。面向?qū)ο蠹夹g(shù)在軟件設(shè)計(jì)當(dāng)中占有非常重要的地位,但面向?qū)ο蟛⒉皇荂++等語(yǔ)言的專利。實(shí)際上,在諸如操作系統(tǒng)等系統(tǒng)軟件當(dāng)中,面向?qū)ο蠹夹g(shù)的使用是非常廣泛的。利用C等高級(jí)語(yǔ)言實(shí)現(xiàn)面向?qū)ο蠹夹g(shù),不僅結(jié)構(gòu)清晰,而且在執(zhí)行效率等方面也有C++等語(yǔ)言無(wú)法比擬的優(yōu)勢(shì)。
1 面向?qū)ο笄度胧郊夹g(shù)分析
1.1 面向?qū)ο笄度胧郊夹g(shù)現(xiàn)狀
目前,面向?qū)ο蠹夹g(shù)在嵌入式系統(tǒng)中的應(yīng)用雖然有限,但是已經(jīng)得到了充分的發(fā)展。EC++是1996年在日本成立的Embedded C技術(shù)委員會(huì)針對(duì)嵌入式應(yīng)用制定的減小代碼尺寸的C++標(biāo)準(zhǔn);EC++引人嵌入式系統(tǒng),使得嵌入式開發(fā)和個(gè)人計(jì)算機(jī)、小型機(jī)等之間在開發(fā)上的差別逐漸消除。軟件工程中的很多經(jīng)驗(yàn)方法乃至庫(kù)函數(shù)可以移植到嵌入式系統(tǒng)。EC++的使用使軟硬件開發(fā)可以分工,從事嵌入式軟件開發(fā)不再必須精通系統(tǒng)硬件和相應(yīng)匯編指令集。相信使用C編程的開發(fā)者對(duì)這個(gè)優(yōu)點(diǎn)都有感受,而EC++更為突出。
目前,在圖形用戶界面GUI、Web Server圖像處理技術(shù)、數(shù)據(jù)采集等方面已經(jīng)有著很成熟的面向?qū)ο箝_發(fā)模式;采用設(shè)備輸入輸出接口等抽象層,融合網(wǎng)絡(luò)、驅(qū)動(dòng)等底層操作,抽象成為上層開發(fā)的統(tǒng)一接口,提高可移植性和擴(kuò)展性,方便后期維護(hù)和代碼重用。
1.2面向?qū)ο笄度胧郊夹g(shù)的總體設(shè)計(jì)思想
面向?qū)ο笄度胧郊夹g(shù)的總體設(shè)計(jì)思想是所有操作由對(duì)象和消息驅(qū)動(dòng)(或者事件驅(qū)動(dòng))。通過對(duì)現(xiàn)有面向?qū)ο蠹夹g(shù)的分析,對(duì)多種嵌入式應(yīng)用系統(tǒng)的開發(fā)技術(shù)要求進(jìn)行總結(jié),抽象出各種接口和組件類。各個(gè)組件、接口、數(shù)據(jù)都被設(shè)計(jì)成為對(duì)象。對(duì)象之間通過消息通信形成整體,構(gòu)成系統(tǒng)。在分析和設(shè)計(jì)的過程中,采用OOA/OOD進(jìn)行分析設(shè)計(jì),形成一個(gè)層次清楚、移植性好、易于擴(kuò)展和重定義的系統(tǒng)結(jié)構(gòu)。
從圖1中可以看出,在整個(gè)模塊與體系結(jié)構(gòu)中面向?qū)ο蠹夹g(shù)的重要作用。
目前,嵌入式系統(tǒng)大都采取分層結(jié)構(gòu)設(shè)計(jì),并允許根據(jù)需要對(duì)不同的層次進(jìn)行重寫和替換。抽象接口是在抽象層定義的,不依賴于任何特殊硬件。所有頂層的操作和輸入處理都建立在抽象接口之上。這種分層結(jié)構(gòu)實(shí)際上就是一種面向?qū)ο蟮某绦蚪Y(jié)構(gòu),目的是將底層實(shí)際的不同驅(qū)動(dòng)抽象成對(duì)上層的統(tǒng)一接口。進(jìn)程管理、線程管理、內(nèi)存管理、設(shè)備管理等也可以抽象成為統(tǒng)一的接口,方便嵌入式系統(tǒng)的開發(fā)。
采用上述分層方法,使用標(biāo)準(zhǔn)C或者標(biāo)準(zhǔn)C++編寫上層的應(yīng)用程序,把與硬件及操作系統(tǒng)相關(guān)的接口完全封裝起來(lái),對(duì)上層應(yīng)用程序編寫著來(lái)講,完全感覺不到底層的變化。硬件變化或操作系統(tǒng)改變只需將硬件依賴型接口內(nèi)部改變即可,這樣就能滿足程序運(yùn)行于不同操作系統(tǒng)上的需要,并且可以是在不同系統(tǒng)下采用統(tǒng)一的接口。
2 面向?qū)ο笄度胧皆O(shè)計(jì)與模型的實(shí)際應(yīng)用
數(shù)字視頻監(jiān)控系統(tǒng)是以計(jì)算機(jī)為核心,結(jié)合視頻處理、通信、網(wǎng)絡(luò)和存儲(chǔ)技術(shù)的一種監(jiān)控系統(tǒng)。數(shù)字視頻監(jiān)控系統(tǒng)具有以往傳統(tǒng)的電視監(jiān)控系統(tǒng)等所有的功能,并且在遠(yuǎn)距離、性能方面相比具有很大的優(yōu)勢(shì)。它與計(jì)算機(jī)相結(jié)合,使得異地、遠(yuǎn)距離監(jiān)控變得非常方便;與網(wǎng)絡(luò)、通信的結(jié)合,形成更有實(shí)用價(jià)值、功能更加強(qiáng)大的網(wǎng)絡(luò)通信管理系統(tǒng)。信息化的時(shí)代要求信息的處理隨時(shí)隨地,而數(shù)字視頻監(jiān)控系統(tǒng)正是這種特點(diǎn)和趨勢(shì)的具體體現(xiàn)。
已經(jīng)實(shí)現(xiàn)的SuperVisionl.0為了保證具有良好的靈活性和可擴(kuò)展性,在開發(fā)中使用了許多面向?qū)ο蠹夹g(shù)。根據(jù)實(shí)際生活以及監(jiān)控系統(tǒng)的需要,分析數(shù)字視頻監(jiān)控系統(tǒng)中可能出現(xiàn)的異常情況,重點(diǎn)在于運(yùn)動(dòng)檢測(cè),異常報(bào)警處理方面的設(shè)計(jì),以及整個(gè)工程的速度性能的考慮。設(shè)計(jì)靜止物體緩慢變化、光線緩慢變化以及消除噪聲和干擾等多種具有不同應(yīng)用需求的動(dòng)態(tài)檢測(cè)算法,同時(shí)提出不同靈敏度的“階梯思想”;設(shè)計(jì)遠(yuǎn)程控制與本地控制并行處理的機(jī)制算法,構(gòu)建本地的Web服務(wù)器,方便用戶快捷方便地控制;設(shè)計(jì)整個(gè)監(jiān)控系統(tǒng)結(jié)構(gòu)整合的算法,保證視頻、圖像的捕捉,異常監(jiān)測(cè),報(bào)警機(jī)制(包括E-Mail、Ftp、電話、紀(jì)錄備份、Web訪問)與記錄回放等的協(xié)調(diào)工作;在內(nèi)容存儲(chǔ)上,采用高效的MPEG-4的壓縮算法,圖片采用BMF,JPEG的方式,方便運(yùn)動(dòng)檢測(cè)和網(wǎng)絡(luò)的傳輸;友好的人機(jī)界面提供便利的操作,滿足視頻監(jiān)控系統(tǒng)中實(shí)時(shí)傳輸、處理和回放等需求。
2.1 系統(tǒng)實(shí)現(xiàn)流程及結(jié)構(gòu)分析
目前,流行的嵌入式軟件大都是采取分層結(jié)構(gòu)設(shè)計(jì)的。SuperVision1.O也采用了這種分層的結(jié)構(gòu)設(shè)計(jì),并允許根據(jù)需要對(duì)不同的層次進(jìn)行重寫和替換,抽象接口是在抽象層定義的,不依賴于任何特殊硬件。所有頂層的操作和處理都建立在抽象接口之上。這種分層結(jié)構(gòu)實(shí)際上就是一種面向?qū)ο蟮某绦蚪Y(jié)構(gòu),目的是將底層實(shí)際的不同驅(qū)動(dòng)或者實(shí)現(xiàn)抽象成對(duì)上層的統(tǒng)一接口。在實(shí)現(xiàn)中底層部分主要針對(duì)視頻采集和壓縮算法的接口統(tǒng)一實(shí)現(xiàn),針對(duì)不同的驅(qū)動(dòng)和壓縮得到統(tǒng)一的上層接口,方便擴(kuò)展和修改。上層中的報(bào)警機(jī)制(包括E-Mail、FTP、電話,紀(jì)錄備份和Web訪問)采用對(duì)象的特點(diǎn),把每個(gè)報(bào)警方法都抽象成為對(duì)象,針對(duì)每種不同的程序?qū)崿F(xiàn)統(tǒng)一使用接口。系統(tǒng)流程如圖2所示。
報(bào)警機(jī)制部分主要實(shí)現(xiàn)遠(yuǎn)程控制和實(shí)時(shí)數(shù)據(jù)傳輸部分功能部分功能。
①遠(yuǎn)程控制:采用Server/Browser結(jié)構(gòu),使客戶端能夠在網(wǎng)上任何節(jié)點(diǎn)接入,實(shí)現(xiàn)客戶端發(fā)布的零配置,同時(shí)實(shí)現(xiàn)用戶驗(yàn)證機(jī)制,確保安全。實(shí)現(xiàn)的主要功能包括:開啟/停止監(jiān)控系統(tǒng)的實(shí)時(shí)報(bào)警,實(shí)時(shí)更新監(jiān)控圖像,獲取系統(tǒng)歷史記錄。
②實(shí)時(shí)數(shù)據(jù)傳輸:提供可調(diào)用并且通用的接口函數(shù),由報(bào)警子系統(tǒng)調(diào)用。通過多種方式把各種實(shí)時(shí)數(shù)據(jù)傳送出去,包括http、FTP和E-ail。
2.2統(tǒng)一接口實(shí)例
試想如果一個(gè)城市的消防車去鄰近的城市救火,卻發(fā)現(xiàn)無(wú)法和這個(gè)城市的消防栓對(duì)接,這是多么可怕的災(zāi)難?美國(guó)人在上個(gè)世紀(jì)初就有了統(tǒng)一接口的思想,現(xiàn)在再?gòu)?qiáng)調(diào)這個(gè)也不為過。其目的就是實(shí)現(xiàn)系統(tǒng)軟件中,不修改任何的軟件代碼,就可以換上其他規(guī)格甚至其他廠家的同類型產(chǎn)品。開發(fā)人員可以很方便根據(jù)統(tǒng)一的接口擴(kuò)展和移植相關(guān)代碼。無(wú)論如何,美國(guó)人的這個(gè)近乎異想天開的想法,現(xiàn)在正在慢慢地轉(zhuǎn)變成為現(xiàn)實(shí)。沒有PC兼容的規(guī)范,沒有API接口,很難想象微軟的軟件可以像現(xiàn)在這樣大行其道。
該系統(tǒng)的模塊設(shè)計(jì)考慮和采用了統(tǒng)一接口的思想。它接收系統(tǒng)產(chǎn)生的報(bào)警消息產(chǎn)生相應(yīng)的消息隊(duì)列,對(duì)所有的消息進(jìn)行分類送相應(yīng)的系統(tǒng)模塊進(jìn)行處理,根據(jù)對(duì)應(yīng)的模塊類別調(diào)用相應(yīng)的處理方法,并記錄處理信息。當(dāng)工作失敗時(shí)自動(dòng)進(jìn)行相應(yīng)的事務(wù)處理。
視頻采集可以基于采集卡的SDK接口函數(shù),也可以基于Microsoft的DirectShow技術(shù)開發(fā)的音視頻訊號(hào)捕捉接口,或者基于底層的驅(qū)動(dòng)等方法來(lái)實(shí)現(xiàn)。采用統(tǒng)一接口的思想可以將各種實(shí)現(xiàn)策略抽象成為對(duì)上層的統(tǒng)一接口。具體的調(diào)用采用面向?qū)ο蟮奶攸c(diǎn)、調(diào)用相應(yīng)的接口實(shí)現(xiàn)策略。
CaptureProc重要接口定義如下:
Class CaDtureProc{
String Type; //區(qū)別接口類別
b001 mnuStartCapture(); //開始錄像
b001 mnuStopCapture(); //停止錄像
bool TakePicture(); //捕獲圖像
bool Setting(); //相關(guān)設(shè)置選項(xiàng)
Shc)wConfiglareDialog(&.type); //根據(jù)類型不同給出不同的設(shè)置界面
};
報(bào)警機(jī)制(包括E-mail、FTP、電話、紀(jì)錄備份和Web訪問)同樣可以采用面向?qū)ο蟮奶攸c(diǎn),把每個(gè)報(bào)警方法都抽象成為對(duì)象,針對(duì)每種不同的程序?qū)崿F(xiàn)統(tǒng)一使用接口,方便代碼編寫和擴(kuò)展。在實(shí)現(xiàn)中包括Cmail、Cftp、Ctel、Cweb四個(gè)類,對(duì)應(yīng)的接口統(tǒng)一定義為啟動(dòng)、設(shè)置、關(guān)閉等抽象函數(shù)。根據(jù)用戶所設(shè)置的參數(shù)形式,系統(tǒng)在消息的驅(qū)動(dòng)下,根據(jù)定義的具體對(duì)象調(diào)用相應(yīng)的方法。將結(jié)果和變化輸出到指定的設(shè)備和存儲(chǔ)體中,用戶就可以方便及時(shí)地得到信息和觀察到運(yùn)行過程和結(jié)果。系統(tǒng)設(shè)計(jì)中除了采用前面提到的設(shè)計(jì)模式外,還采用了對(duì)象樹等模式,方便分析整個(gè)系統(tǒng)的運(yùn)行和完善情況。
3 面向?qū)ο笄度胧郊夹g(shù)的性能研究
當(dāng)系統(tǒng)的分析與設(shè)計(jì)采用面向?qū)ο蠓椒〞r(shí),并不意味著所使用的編程語(yǔ)言也一定是面向?qū)ο蟮?。事?shí)上,這種分析設(shè)計(jì)方法的具體實(shí)現(xiàn)可以使用任何編程語(yǔ)言(如匯編語(yǔ)言或C語(yǔ)言);但是,在程序設(shè)計(jì)上要盡可能地使用面向?qū)ο蟮乃枷?,如體現(xiàn)程序結(jié)構(gòu)方面的封裝性、消息傳遞等。這樣才會(huì)使程序結(jié)構(gòu)清晰,便于應(yīng)付隨著需求變化而產(chǎn)生的不斷更新和系統(tǒng)維護(hù)。
過去嵌入式系統(tǒng)分析和設(shè)計(jì)方面的主要問題為:①分析設(shè)計(jì)沒有一個(gè)統(tǒng)一的標(biāo)準(zhǔn);②分析設(shè)計(jì)方法不統(tǒng)一;③從分析設(shè)計(jì)到制作和編程沒有一個(gè)始終一貫的工程化方法,使得產(chǎn)品形成的每一個(gè)過程人為因素影響十分嚴(yán)重;④分析設(shè)計(jì)的成果不能被開發(fā)類似項(xiàng)目或產(chǎn)品時(shí)重用。以上4個(gè)方面的問題成為多年來(lái)制約嵌入式系統(tǒng)發(fā)展的主要瓶頸,使得大部分從事嵌入式系統(tǒng)應(yīng)用開發(fā)的組織和團(tuán)體,基本上是采用小組甚至是作坊式的運(yùn)作模式。這樣,開發(fā)較復(fù)雜或大型系統(tǒng)的工作變得十分困難甚至無(wú)法進(jìn)行,或因?yàn)橄到y(tǒng)需求的不斷變化或小組成員的流動(dòng)導(dǎo)致項(xiàng)目失敗。目前,面向?qū)ο蠹夹g(shù)正是建立在對(duì)真實(shí)世界抽象思維的基礎(chǔ)上,面向?qū)ο蟮那度胧较到y(tǒng)建模同任何軟件密集型系統(tǒng)建模一樣,從系統(tǒng)中的類建模開始。為了解類的結(jié)構(gòu),首先對(duì)系統(tǒng)工作過程作一個(gè)總體陳述,對(duì)嵌入式系統(tǒng)需求、分析、設(shè)計(jì)、制作、測(cè)試和維護(hù)過程的結(jié)構(gòu)特征和行為特征統(tǒng)一的工程化描述方法,改變以往的嵌入式軟件開發(fā)現(xiàn)狀。
SuperVisionl.0采用了面向?qū)ο笤O(shè)計(jì)方法,因?yàn)榍度胧介_發(fā)中硬件條件的限制,相對(duì)于PC機(jī)上的面向?qū)ο缶幊逃懈嗟睦щy,下面就探討一下在嵌入式開發(fā)中的OOP的難點(diǎn)和解決方法。面向?qū)ο缶幊绦枰嗟倪\(yùn)行時(shí)間和資源需求,如果不采用面向?qū)ο缶幊蹋瑒t面臨嵌入式開發(fā)中的代碼數(shù)量、復(fù)雜度越來(lái)越高帶來(lái)的維護(hù)效率下降的問題。
從圖3可以看出C++語(yǔ)法的概況。
底層的代碼在面向?qū)ο缶幾g器中使用時(shí)并沒有更高額的代價(jià)損耗,因此,在嵌人式開發(fā)時(shí)可以不使用資源代價(jià)比較高的而又不是很重要的部分,而是采用底層的代碼實(shí)現(xiàn),或者改善面向?qū)ο蟮木幾g器,變相利用底層的優(yōu)點(diǎn)彌補(bǔ)面向?qū)ο蟪绦蛟O(shè)計(jì)的缺陷。這樣嵌入式系統(tǒng)在性能優(yōu)勢(shì)和程序方便性、可維護(hù)性、可移植性上能夠得到統(tǒng)一。
4 結(jié)論和展望
采用面向?qū)ο笏枷牒颓度胧杰浖攸c(diǎn)相結(jié)合,在綜合運(yùn)用,如多級(jí)抽象類型定義,不依靠具體程序設(shè)計(jì)語(yǔ)言的更高抽象層次上,對(duì)對(duì)象進(jìn)行抽象描述,隱藏具體實(shí)現(xiàn)細(xì)節(jié),使程序結(jié)構(gòu)易于擴(kuò)充,縮短開發(fā)周期。目前這種方法還處于發(fā)展階段,各種新的領(lǐng)域仍在不斷的出現(xiàn),原有的方法也在不斷的檢驗(yàn)和改進(jìn),面向?qū)ο蟮那度胧?a class="contentlabel" href="http://2s4d.com/news/listbylabel/label/開發(fā)技術(shù)">開發(fā)技術(shù)的重要意義已經(jīng)不容置疑,擺脫了以往結(jié)構(gòu)化范式的影響。面向?qū)ο笄度胧介_發(fā)技術(shù)在SuperVisionl.0系統(tǒng)中得到驗(yàn)證,并根據(jù)具體的面向?qū)ο缶幊痰男阅芴攸c(diǎn)調(diào)整資源分配策略。
從目前國(guó)內(nèi)外IT行業(yè)來(lái)看,嵌入式系統(tǒng)及其產(chǎn)品將在Internet衍生出來(lái)的新型市場(chǎng)中起到重要的作用,后PC時(shí)代帶來(lái)的沖擊將是未來(lái)市場(chǎng)的新景觀。
c++相關(guān)文章:c++教程
評(píng)論