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