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