【文章內(nèi)容簡(jiǎn)介】
發(fā)一個(gè)新的應(yīng)用程序,程序員幾乎都要從零開始做起,并且要針對(duì)具體問題做大量重復(fù)而煩瑣的工作。即使重用代碼,也只是進(jìn)行簡(jiǎn)單的拷貝,要實(shí)現(xiàn)的功能稍有不同,就會(huì)導(dǎo)致對(duì)代碼逐行進(jìn)行修改,也就是說,這種模式不能對(duì)已編好的應(yīng)用程序的某些部分直接繼承引用。(2) 維護(hù)程序的一致性差。應(yīng)用傳統(tǒng)的 SP 模式開發(fā)應(yīng)用程序時(shí),數(shù)據(jù)和方法是分開的,這很可能產(chǎn)生問題空間和方法空間在結(jié)構(gòu)上的不一致。對(duì)程序運(yùn)行起重要作用的數(shù)據(jù)一般要做全局處理,若為了新的需要改變某一數(shù)據(jù)結(jié)構(gòu),則所有的處理數(shù)據(jù)的過程都要進(jìn)行重新考慮,做出必要的修改,以保證與數(shù)據(jù)的一致性。因此,要花費(fèi)大量的精力來維護(hù)數(shù)據(jù)和數(shù)據(jù)處理過程的一致性,而且還可能產(chǎn)生不少錯(cuò)誤。結(jié)構(gòu)化的程序開發(fā)已經(jīng)不能滿足軟件發(fā)展的需求了。這個(gè)時(shí)候,出現(xiàn)了面7向?qū)ο蟮木幊趟枷?,?jiǎn)稱為 OO(Object Oriented) 。面向?qū)ο蟮某绦蜷_發(fā)被稱為 OOP(Object Oriented Programming) 。在介紹面向?qū)ο蟮乃枷胫埃瑧?yīng)該明確指出,面向?qū)ο笫且环N編程的思想,而與具體的語言無關(guān)。比較流行的支持面向?qū)ο蟮恼Z言有 C++、C和 Java。 面向?qū)ο蟪绦蛟O(shè)計(jì)采用面向?qū)ο竽J浇⑵饋淼某绦蛴稍S多不同類型的對(duì)象組成,各對(duì)象既是獨(dú)立的實(shí)體,又可以通過各自的接口相互作用。對(duì)象中的方法決定要向哪個(gè)對(duì)象發(fā)送消息、發(fā)送什么樣的消息以及收到消息后如何處理等。也就是說,OOP模式是以對(duì)象為中心的。由于對(duì)象反映了應(yīng)用領(lǐng)域中具有完整的特征和行為的實(shí)體或單元,從程序設(shè)計(jì)的角度我們可以把它看成模塊。因此,對(duì)象具有一定的穩(wěn)定性,可以被當(dāng)作一個(gè)控件去構(gòu)成更復(fù)雜的應(yīng)用。又由于對(duì)象一般封裝的是某一具體的實(shí)際工作的各種成分,因此某一對(duì)象改變時(shí),對(duì)整個(gè)系統(tǒng)幾乎沒有影響。為了描述功能相似的對(duì)象,OOP 中引用了“類”的概念。類與類之間的關(guān)系是層次結(jié)構(gòu),屬于某個(gè)類的對(duì)象除了具有該類的全部特征外,還具有層次結(jié)構(gòu)中該類上層所有類的全部性質(zhì),這種機(jī)制稱為繼承。面向?qū)ο蟪绦蛟O(shè)計(jì)方法的繼承性和模塊性,使得新的應(yīng)用程序可以在原來對(duì)象的基礎(chǔ)上通過重用和擴(kuò)展來進(jìn)行,而不必從頭做起或者拷貝原有代碼。這大大提高了程序開發(fā)的效率,減少了重新編寫代碼的工作量,同時(shí)降低了程序設(shè)計(jì)過程中出錯(cuò)的可能性。面向?qū)ο蠓椒ǖ膶?shí)質(zhì)是強(qiáng)調(diào)從客觀世界中的固有規(guī)律出發(fā)來構(gòu)造系統(tǒng),用人類在現(xiàn)實(shí)生活中常用的思維方式來認(rèn)識(shí)、理解和描述客觀事物。編寫面向?qū)ο蟮某绦蛟O(shè)計(jì)使開發(fā)人員能夠重復(fù)使用工作成果并使程序維護(hù)更為容易,并且不易出錯(cuò)。8第 2章 嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)總體設(shè)計(jì) 系統(tǒng)總體框圖本系統(tǒng)主要由操作系統(tǒng)定制、視頻圖像采集、視頻圖像傳輸三部分組成。系統(tǒng)首先通過 USB 攝像頭采集現(xiàn)場(chǎng)實(shí)時(shí)視頻信息,并對(duì)其進(jìn)行壓縮。然后,使用以太網(wǎng)卡在 ARM 開發(fā)板與客戶機(jī)之間構(gòu)建一個(gè)網(wǎng)絡(luò),從而將壓縮的視頻圖像數(shù)據(jù)傳輸?shù)街鳈C(jī)端應(yīng)用程序,終端用戶即可在主機(jī)端通過客戶端軟件程序查看遠(yuǎn)程視頻影像。視頻監(jiān)控系統(tǒng)總體結(jié)構(gòu)如圖 3 所示。 視頻圖像采集模塊圖像采集模塊的硬件資源選用了當(dāng)前市面上應(yīng)用最廣泛的 USB 接口的中星微攝像頭。該款攝像頭造價(jià)低廉,成像效果好,用于本系統(tǒng)中體現(xiàn)出了較高的性價(jià)比。在視頻圖像采集模塊中,本系統(tǒng)使用的是中星微 ZC030X 系列。中星微攝像頭采用了中星微 301PLUS 快速主控芯片。該芯片是一款高性能圖像壓縮芯片,輸出 MIPEG 視頻流數(shù)據(jù)。MIPEG(Motion JPEG)主要是基于靜態(tài)視頻壓縮發(fā)展起來的技術(shù),特點(diǎn)是基本不考慮視頻流中不同幀之間的變化,只單獨(dú)對(duì)某一幀進(jìn)行壓縮,通??蛇_(dá)到 6:1 的壓縮率。它的誤差穩(wěn)定性非常好,可以獲取清晰度很高的視頻圖像,而且還可以靈活設(shè)置各路視頻清晰度,壓縮幀數(shù)。 本系統(tǒng)直接從攝像頭驅(qū)動(dòng)中獲取 MJPEG 視頻流數(shù)據(jù)。視頻采集模塊 ARM 處理器 網(wǎng)絡(luò)傳輸模塊客戶顯示模塊 網(wǎng)絡(luò)圖 3 系統(tǒng)總體框架9 ARM處理器模塊嵌入式系統(tǒng)開發(fā)與其它軟件開發(fā)最大的區(qū)別之一就是需要一個(gè)專門的目標(biāo)設(shè)備平臺(tái),這個(gè)區(qū)別的主要原因是一般進(jìn)行的開發(fā)都是在通用計(jì)算機(jī)上運(yùn)行的,所以開發(fā)和調(diào)試工作在一臺(tái)計(jì)算機(jī)上完成即可。但嵌入式開發(fā)需要應(yīng)用在實(shí)際的嵌入式設(shè)備中的,而且,當(dāng)今嵌入式設(shè)備中的很多結(jié)構(gòu)沒有統(tǒng)一,加上嵌入式設(shè)備一般都有較高的可靠性要求,因此需要專門的設(shè)備進(jìn)行調(diào)試就不足為奇了,雖然有模擬器軟件,但這并不能完全展現(xiàn)軟件在設(shè)備上的表現(xiàn),所以使用目標(biāo)設(shè)備平臺(tái)進(jìn)行測(cè)試是必要的。由于 ARM 處理器的性能及價(jià)格上的優(yōu)勢(shì)且支持 Windows CE,所以該系統(tǒng)選用以 ARM 為核心的三星 S3C2410 作為開發(fā)的硬件平臺(tái)。在本軟件系統(tǒng)中,使用 Windows Embedded 的模擬器作為硬件平臺(tái)。 視頻圖像傳輸模塊目前采用的最廣泛的傳輸機(jī)制是 Socket 編程,通過 Socket 我們能對(duì)數(shù)據(jù)流通信進(jìn)行底層和最高級(jí)的控制。通過視頻圖像采集模塊得到的視頻圖像存儲(chǔ)在緩沖區(qū)中,緩沖區(qū)由服務(wù)端應(yīng)用程序申請(qǐng)獲得,之后等待任何一個(gè)客戶端連接到服務(wù)器,一旦客戶連接到服務(wù)器,服務(wù)端應(yīng)用程序就為每一個(gè)客戶端建立一個(gè)線程用于傳輸視頻圖像數(shù)據(jù)。這樣不同客戶應(yīng)用程序的通信就不會(huì)相互影響,且效率更高,增加了服務(wù)器的吞吐量。通信模塊采用 Windows Socket 編程機(jī)制。編程語言使用強(qiáng)大的面向?qū)ο蟮?C語言。 客戶端接收模塊在客戶端連接服務(wù)器成功后,服務(wù)器為每一個(gè)客戶生成一個(gè) Socket 對(duì)象。為了保證數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性和視頻的連續(xù)性,每接受到一幀圖像后,隔一段時(shí)間就向服務(wù)器發(fā)出一個(gè)確認(rèn)請(qǐng)求,這樣就保證了客戶端不會(huì)出現(xiàn)擁塞,客戶端通過一幀一幀地顯示圖像來達(dá)到實(shí)時(shí)監(jiān)控的效果,由于網(wǎng)絡(luò)中傳輸?shù)氖菙?shù)據(jù)流,為了將其轉(zhuǎn)換為圖像,我們需要一個(gè)特殊的類 Image 來進(jìn)行對(duì)字節(jié)流到圖像流的轉(zhuǎn)換。并且可以將接收到的視頻數(shù)據(jù)予以保存。10第 3章 嵌入式網(wǎng)絡(luò)視頻系統(tǒng)服務(wù)端軟件系統(tǒng)設(shè)計(jì) 搭建開發(fā)環(huán)境作為一個(gè)開發(fā)人員,必需的開發(fā)環(huán)境必不可少,進(jìn)行 Windows 的開發(fā)主要有兩用人才大方面:操作系統(tǒng)和應(yīng)用程序的開發(fā)。操作系統(tǒng)開發(fā)包括操作系統(tǒng)的定制,驅(qū)動(dòng)開發(fā)以及其它需要完成的底層工作。應(yīng)用程序開發(fā)主根是與實(shí)際應(yīng)用結(jié)合較緊密的程序開發(fā)。要搭建這樣一個(gè)開發(fā)環(huán)境,到少需要兩個(gè)方面,第一是硬件平臺(tái),第二是軟件平臺(tái)。硬件平臺(tái)除了我們平常大多數(shù)開發(fā)需要使用的計(jì)算機(jī)外,還需要目標(biāo)設(shè)備平臺(tái)。目標(biāo)設(shè)備平臺(tái)最好是專門的開發(fā)板或者目標(biāo)機(jī),也可以使用現(xiàn)有的 PC 機(jī)進(jìn)行搭建。軟件平臺(tái)包括操作系統(tǒng),開發(fā)軟件和應(yīng)用程序開發(fā)軟件。在 Windows 開發(fā)中,微軟公司將這些開發(fā)軟件都集成到了 Visual Studio 2022 中。本文的硬件平臺(tái)為模擬器。 軟件開發(fā)平臺(tái)在 Windows CE 早版本的操作系統(tǒng)開發(fā)中,一般用到一個(gè)專門的定制工具:Platform Builder,每個(gè)版本的 Windows CE 都有與之對(duì)應(yīng)的 Platform Builder。到了 Windows 微軟公司通過戰(zhàn)略性的調(diào)整,把 Platform Builder 做成了 Visual Studio 2022 的插件。Visual Studio 2022 是一款集成開發(fā)環(huán)境,不僅支持一般性的桌面應(yīng)用程序開發(fā),同時(shí)支持嵌入式設(shè)備的相關(guān)開發(fā),包括針對(duì) Windows CE 操作系統(tǒng)的開發(fā),使用 Visual Studio 2022 可以自由地選擇自己喜歡的語言。Windows Compact , 的一個(gè)子集, Compact ,那么它開發(fā)的應(yīng)用程序就可以在 Windows 上運(yùn)行。 Platform Bulider 簡(jiǎn)介從本質(zhì)上講,Windows 操作系統(tǒng)的開發(fā)就是一個(gè)為目標(biāo)設(shè)備定制操作系統(tǒng)的過程。這一過程包括在已有的操作系統(tǒng)模塊中選擇需要的模塊,專門為目標(biāo)設(shè)備定制模塊,編譯鏈接和調(diào)試。在安裝過程中最好將其安裝在默認(rèn)的11根目錄下。Platform Builder for 包括如下 一些文件夾:1) CRC 文件夾。主要提供關(guān)于 Platform Builder for 安裝時(shí)的校驗(yàn)信息。2) OSDesigns 文件夾。開發(fā)人員建立的 Windows 操作系統(tǒng)的默認(rèn)存儲(chǔ)文件夾。3) OTHERS 文件夾。存儲(chǔ)運(yùn)行時(shí)文件,映像生成的二進(jìn)制文件,注冊(cè)表文件,批處理文件等需要加入到映像中的文件。4) LATFORM 文件夾。與特定硬件相關(guān)的文件如 BSP 等。5) PRIVATE 文件夾。Windows 的源代碼文件夾。6) PUBLIC 文件夾。主要存儲(chǔ)與硬件平臺(tái)無關(guān)的源代碼文件。7) SDK 文件夾。用以支持 Platform Builder for 的 SDK 工具和庫文件。 定制 Windows 對(duì)于定制 Windows 來講,按照實(shí)際需要對(duì)其進(jìn)行一些組件的添加或者刪除操作,對(duì)操作系統(tǒng)的修改告一段落后,就可以進(jìn)行映像生成了,緊接著將映像下載到目標(biāo)設(shè)備上進(jìn)行測(cè)試,當(dāng)然,先期可以在模擬器上進(jìn)行測(cè)試,測(cè)試 需要不停的反饋,并將反饋的結(jié)果反應(yīng)到系統(tǒng)的修改中,再進(jìn)行生成操作并下載到目標(biāo)設(shè)備測(cè)試……直到滿足實(shí)際要求。這一過程的邏輯關(guān)系如圖 4。 目標(biāo)設(shè)備的準(zhǔn)備目標(biāo)設(shè)備主要是指定制 的 Windows 需要工作的硬件環(huán)境。對(duì)于目標(biāo)設(shè)備,可以大致分為三類:1)使用開發(fā)機(jī)模擬一個(gè)硬件平臺(tái)。2)使用現(xiàn)有的 PC 機(jī)來代替。圖 4 創(chuàng)建系統(tǒng)鏡像反饋測(cè)試創(chuàng)建 生成修改下載到目標(biāo)設(shè)備發(fā)布反饋123)開發(fā)板。在本系統(tǒng)中我們首先使用模擬器來開發(fā)系統(tǒng)然后進(jìn)行開發(fā)板上的測(cè)試 模擬器模擬器(Emulator)是 Windows Embedded CE 開發(fā)一直以來被廣大開發(fā)人員所使用的一個(gè)軟件工具,到了 Visual Studio 2022 模擬器得到了長(zhǎng)足的進(jìn)步,以前在 Windows Embedded 中使用模擬器時(shí),可能會(huì)出現(xiàn)模擬器上運(yùn)行良好,但在實(shí)際設(shè)備上卻不能運(yùn)行或者運(yùn)行出錯(cuò)的情況,這是因?yàn)橐郧暗哪M器都要是在 X86 構(gòu)架的開發(fā)機(jī)上模擬的 X86 處理器,而很多真實(shí)設(shè)備都是 ARM 系列的,最典型的情況就是 ARM 處理器在處理網(wǎng)絡(luò)數(shù)據(jù)時(shí)是 4 字節(jié)對(duì)齊的,而X86 是 2 字節(jié)。到了 Windows Embedded ,模擬器已經(jīng)真正在 X86 的開發(fā)機(jī)上模擬 ARM 處理器,從本質(zhì)上解決了很多問題,但這并不代表模器里的情況就是真實(shí)設(shè)備的情況,不過可以肯定的是,模擬器可以為開發(fā)人員節(jié)省很多開發(fā)時(shí)間。Visual Studio 2022 提供了很多模擬器如: Windows Embedded 模擬器,Pocket PC 模擬器, Windows Mobile 模擬器。相對(duì)而言 Windows Embedded 的模擬器還不夠完善。 創(chuàng)建 Windows Embedded 創(chuàng)建一個(gè)可以在模擬器上運(yùn)行的 Windows Embedded ,Platform Builder for 提供了友好的 Windows Embedded 創(chuàng)建向?qū)鐖D 5。圖 5 創(chuàng)建 Windows Embedded 13當(dāng) Visual Studio 2022 完成項(xiàng)目的創(chuàng)建工作后,會(huì)自動(dòng)啟動(dòng) Windows Embedded 的創(chuàng)建向?qū)?,如圖 6。圖 6 創(chuàng)建 Windows Embedded 該圖告訴你向?qū)У降淄瓿赡切┕ぷ?,步驟如何等信息。單擊下一步進(jìn)入BSP 選擇的頁面,向?qū)?huì)顯示當(dāng)前系統(tǒng)中所包含的 BSP,由于我們要進(jìn)行的是在S3C4210 上的開發(fā),而 Device Emulator 提供的正是 S3C4210 的 BSP 所以我們?cè)谶@里選擇 Device Emulator:ARMV4I 如圖 7。圖 7 創(chuàng)建 Windows Embedded 14接下來進(jìn)入設(shè)計(jì)模板的選擇,如下圖所示,設(shè)計(jì)模板是減輕工開發(fā)人員工作量的一種方式,這些設(shè)計(jì)模板都是微軟公司的工作人員進(jìn)行了尤其是的調(diào)查和分析之后建立的,這里只是設(shè)計(jì)模板選擇的第一步,相當(dāng)于選擇目標(biāo)設(shè)備的應(yīng)用領(lǐng)域。選擇一個(gè)領(lǐng)域后,在向?qū)У挠覀?cè)可以查看關(guān)于它的說明,在這里我們選擇 PDA Device 然后下一步。圖 8 創(chuàng)建 Windows Embedded 進(jìn)入設(shè)計(jì)模板的第二步,如圖 9 所示,在這里我們選擇 Enterprise Web Pad 然后下一步。15圖 9 創(chuàng)建 Windows Embedded 進(jìn)入應(yīng)用程序和多媒體組件選擇對(duì)話框,按照本系統(tǒng)的一些需要我們可以去掉不需要的模塊,添加需要的模塊。如圖 10。圖 10 創(chuàng)建 Windows Embedded 單擊下一步進(jìn)入網(wǎng)絡(luò)與通信模塊對(duì)話框,如圖 11,在此我們選擇了 TCP/IPT 和 WAN。16圖 11 創(chuàng)建 Windows Embedded 到此,Windows Embedded 的創(chuàng)建工作基本完成了。 編輯和修改 Windows Embedded 工程在上一節(jié)中我們完成了 Windows Embedded 操作系統(tǒng)的創(chuàng)建工作,在實(shí)際的工作中這只是操作系統(tǒng)開發(fā)中的很小的一步,也是非常簡(jiǎn)單的一步。為了適應(yīng)不同的應(yīng)用和不同設(shè)備的不同需求,我們必須要對(duì)操作系統(tǒng)進(jìn)行進(jìn)一步的修改工作。一般情況下,對(duì)一個(gè)已經(jīng)建立的操作系統(tǒng)會(huì)有如下幾個(gè)方面的編輯和修改:1)添加/刪除 Catalog Items。2)添加子項(xiàng)目。3)添加 BSP。4)添加設(shè)備驅(qū)動(dòng)程序。5)建立 OAL。6)建立 BootLoader。7)配置和建立已經(jīng)定制的 Windows Embedded