




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 西安電子科技大學(xué)碩士學(xué)位論文基于Windows平臺(tái)的高幀頻場(chǎng)景產(chǎn)生系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)姓名:劉健申請(qǐng)學(xué)位級(jí)別:碩士專(zhuān)業(yè):通信與信息系統(tǒng)指導(dǎo)教師:王軍寧201202 隨著軍事和國(guó)防工業(yè)的發(fā)展,場(chǎng)景模擬產(chǎn)生技術(shù)越來(lái)越在相關(guān)領(lǐng)域得到重視。高幀頻場(chǎng)景產(chǎn)生系統(tǒng)是利用計(jì)算機(jī)軟件來(lái)模擬高速運(yùn)動(dòng)物體在某些環(huán)境中運(yùn)動(dòng)過(guò)硬件板卡上,最后以模擬圖像信號(hào)的形式輸出。該系統(tǒng)既可以直觀(guān)的測(cè)試高速運(yùn)動(dòng)物體跟蹤系統(tǒng)的性能,又可以免去人們大量的野外試驗(yàn)過(guò)程,節(jié)省了時(shí)間,降低了成本。場(chǎng)景產(chǎn)生系統(tǒng)上層應(yīng)用程序的框架設(shè)計(jì)以及具體實(shí)現(xiàn),分別利用蚔甆語(yǔ)言實(shí)現(xiàn)了系統(tǒng)的界面,以動(dòng)態(tài)鏈接庫(kù)形式實(shí)現(xiàn)了系統(tǒng)生成場(chǎng)景的核心部分。本場(chǎng)景產(chǎn)生 琲, :
2、第一章緒論弟第一一早章三緒百論比場(chǎng)景產(chǎn)生技術(shù)概述為了評(píng)價(jià)與高幀頻跟蹤技術(shù)相關(guān)的目標(biāo)檢測(cè)、識(shí)別跟蹤算法,可以直接用紅濟(jì)的,不僅因?yàn)樾阅茌^好的熱象儀器價(jià)格昂貴,而且顯而易見(jiàn)在實(shí)際的場(chǎng)景中要實(shí)驗(yàn)之前,用空間目標(biāo)和場(chǎng)景的仿真系統(tǒng),即場(chǎng)景產(chǎn)生系統(tǒng)來(lái)代替真實(shí)目標(biāo)和場(chǎng)景,初步測(cè)試導(dǎo)引頭識(shí)別跟蹤處理機(jī)的各項(xiàng)性能指標(biāo),以便節(jié)省人力、物力和財(cái)場(chǎng)景產(chǎn)生系統(tǒng)是利用計(jì)算機(jī)產(chǎn)生出空間運(yùn)動(dòng)目標(biāo)和場(chǎng)景的圖像信息,所產(chǎn)生的圖像信息可以模擬紅外熱象儀所獲得的信息【】。由于計(jì)算機(jī)技術(shù)、高速大容量動(dòng)態(tài)存貯器、以及適用于圖形處理的高速微處理器的發(fā)展,二維圖形產(chǎn)生和顯示已發(fā)展到三維圖形產(chǎn)生,所以產(chǎn)生空間運(yùn)動(dòng)目標(biāo)和場(chǎng)景的圖像并用于導(dǎo)引頭信
3、息機(jī)械模擬目標(biāo)測(cè)試法尺寸和對(duì)比度的目標(biāo)模型作直線(xiàn)或圓周運(yùn)動(dòng),將攝像機(jī)攝取的目標(biāo)圖像送入電子跟蹤器,最終實(shí)現(xiàn)對(duì)該目標(biāo)的捕獲和跟蹤。機(jī)械模擬目標(biāo)通常以一定色調(diào)的幕布或畫(huà)面作為背景,通過(guò)改變目標(biāo)大小和色調(diào)、照度、運(yùn)動(dòng)速度等可以完成最小跟蹤對(duì)比度、最大跟蹤速度、最大跟蹤誤差的定量測(cè)量。這種方法的優(yōu)點(diǎn)是簡(jiǎn)便易行,缺點(diǎn)是測(cè)試精度不高,實(shí)驗(yàn)條件不易控制,效率低,需要較大的測(cè)試場(chǎng)地。電模擬目標(biāo)測(cè)試法這種測(cè)試方法的核心是用一臺(tái)專(zhuān)用的硬件實(shí)現(xiàn)的電模擬目標(biāo)發(fā)生器代替通過(guò)攝像機(jī)輸出的外界景物目標(biāo)。該模擬目標(biāo)發(fā)生器可以產(chǎn)生一個(gè)或多個(gè)大小、幅形、極性均可改變的視頻電信號(hào)。模擬目標(biāo)在視場(chǎng)中的位置可以人工或自動(dòng)控制。自動(dòng)模擬
4、目標(biāo)的運(yùn)動(dòng)有直線(xiàn)交虼怪狽較,斜線(xiàn)和圓周等方式,運(yùn)動(dòng)的速度和頻率可調(diào)??蓪?duì)圖像跟蹤器中的電子跟蹤器的性能進(jìn)行定量測(cè)量。這種方法的優(yōu)點(diǎn)是一些測(cè)試參數(shù)可控,如對(duì)比度、目標(biāo)大小、形狀、速度、 運(yùn)動(dòng)方式等,缺點(diǎn)是目標(biāo)形狀簡(jiǎn)單、缺少背景,缺乏真實(shí)感,尤其復(fù)雜條件下的跟蹤性能測(cè)試不易實(shí)現(xiàn)??勺児鈱W(xué)目標(biāo)模擬器測(cè)試法用計(jì)算機(jī)視景仿真技術(shù),測(cè)試圖像跟蹤器的跟蹤性能可以有兩種方式。一種是采用全視景仿真,測(cè)試圖像跟蹤器的整機(jī)性能。即用計(jì)算機(jī)仿真具有真實(shí)感的戰(zhàn)地背景和運(yùn)動(dòng)目標(biāo)的三維圖像,通過(guò)投影儀投射到大屏幕上,營(yíng)造一個(gè)逼真的戰(zhàn)場(chǎng)環(huán)境。圖像跟蹤器通過(guò)自身的電視攝像頭、隨動(dòng)系統(tǒng)捕獲目標(biāo)、跟蹤目標(biāo),測(cè)試它整機(jī)的跟蹤性能,這
5、樣更接近于實(shí)際應(yīng)用情況。不過(guò),這種方法仿真對(duì)象相對(duì)較少、占用的測(cè)試場(chǎng)地較大。另外一種是用計(jì)算機(jī)仿真圖像跟蹤器電視攝像頭的視景,取代圖像跟蹤器電視攝像頭輸出的外界景物,直接輸入到圖像跟蹤器的電子跟蹤器部分圖像采集、處理、識(shí)別、定位、跟蹤部分,用于檢測(cè)該部分的性能。該方法仿真對(duì)象較多,但結(jié)構(gòu)緊湊,占用場(chǎng)地較小。以記錄圖像數(shù)據(jù)。該系統(tǒng)主要利用將雙路高速數(shù)字?jǐn)z像機(jī)所采集的圖像 第一章緒論線(xiàn)將數(shù)據(jù)傳輸至進(jìn)行記錄。該系統(tǒng)主要用于跟蹤和識(shí)別高速運(yùn)動(dòng)物體。在高幀頻顯示方面,國(guó)內(nèi)大多使用編程實(shí)現(xiàn)高幀頻圖像數(shù)據(jù)的實(shí)時(shí)采嵌入式圖像采集顯示系統(tǒng),可以進(jìn)行實(shí)時(shí)的采集顯示幀頻為幀秒、分辨率為實(shí)現(xiàn)高速圖像數(shù)據(jù)流的幀頻變換和
6、時(shí)鐘域變換,在相應(yīng)的顯示時(shí)序控制下,通過(guò);懷蒝視頻格式以滿(mǎn)足顯示設(shè)備的需要,實(shí)現(xiàn)視頻圖像的穩(wěn)定顯示。在這種方案中,實(shí)現(xiàn)了對(duì)分辨率的圖像進(jìn)行顯示。顯示的方隒技術(shù)早期開(kāi)發(fā)貿(mào)絳蟣匭朧褂夢(mèng)硤峁目猓苯擁饔肳象的方式重新組織,使他們具有抽象、封裝、繼承、多態(tài)等特征。但要注意到,在運(yùn)行時(shí)動(dòng)態(tài)獲取類(lèi)型并與系統(tǒng)中的其他對(duì)象協(xié)同,在技術(shù)實(shí)現(xiàn)上是非常困難的。隨著計(jì)算機(jī)網(wǎng)絡(luò)的飛速發(fā)展,軟件的應(yīng)用環(huán)境變得更加廣闊。與此同時(shí)軟件的設(shè)計(jì)難度也在提高。為適應(yīng)這種分布式軟件應(yīng)用環(huán)境,組件化程序設(shè)計(jì)思想迅速地發(fā)展起來(lái)。組件化程序設(shè)計(jì)思想就是將復(fù)雜的應(yīng)用程序設(shè)計(jì)成一些小的、功能單一的組件模塊,這些組件模塊可以運(yùn)行在同一臺(tái)機(jī)器上,也
7、可以運(yùn)行在不同的機(jī)器上,甚至機(jī)器的運(yùn)行環(huán)境也可以不同。認(rèn)喙丶際酢的特性包括:語(yǔ)言無(wú)關(guān)性、進(jìn)程透明性、可重用性【】。 簡(jiǎn)單的講,甆平臺(tái)是一個(gè)建立在開(kāi)放互聯(lián)網(wǎng)絡(luò)協(xié)議和標(biāo)準(zhǔn)之上,它使用圖像跟蹤器研制完成后,需要對(duì)跟蹤性能進(jìn)行評(píng)估。通過(guò)圖像跟蹤器測(cè)試評(píng)估系統(tǒng)的研制,可以在實(shí)驗(yàn)室通過(guò)模擬各種實(shí)際場(chǎng)景,跟蹤目標(biāo)和干擾情況,來(lái)對(duì)圖像跟蹤器跟蹤性能進(jìn)行測(cè)試和評(píng)估。及時(shí)地對(duì)圖像跟蹤器進(jìn)行測(cè)試評(píng)估一方面能夠檢驗(yàn)圖像跟蹤器的性能要求,另一方面也能夠在圖像跟蹤器的開(kāi)發(fā)過(guò)程中,促進(jìn)發(fā)現(xiàn)跟蹤器的問(wèn)題和改進(jìn)跟蹤器的性能。論文的主要內(nèi)容安排文章主要安排以下五個(gè)章節(jié):第一章為緒論部分,主要闡述了課題的背景以及研究的對(duì)象。 第一
8、章緒論第三章主要介紹了場(chǎng)景產(chǎn)生系統(tǒng)的上層軟件的設(shè)計(jì)與實(shí)現(xiàn)。闡述了上層應(yīng)用程序的框架設(shè)計(jì),界面設(shè)計(jì),核心模塊設(shè)計(jì)方法。詳細(xì)介紹了整體應(yīng)用程序的實(shí)現(xiàn)過(guò)程。的過(guò)程。最后介紹了如何具體實(shí)現(xiàn)這個(gè)驅(qū)動(dòng)程序。第五章為總結(jié)和展望,主要對(duì)系統(tǒng)做出了總結(jié)和進(jìn)一步研究的展望。 多線(xiàn)程的相關(guān)概念并行是一個(gè)系統(tǒng)可以同時(shí)執(zhí)行多個(gè)程式的能力?;旧?,系統(tǒng)使用一個(gè)硬體時(shí)鐘為同時(shí)執(zhí)行的每個(gè)程序配置時(shí)間片段,如果時(shí)間片段夠小,并且機(jī)器也沒(méi)有由于運(yùn)行太多的程序而超出負(fù)荷時(shí),那么在使用者看來(lái),所有的這些程序似乎在同時(shí)執(zhí)行著。多線(xiàn)程是在一個(gè)程序內(nèi)部實(shí)現(xiàn)并行的能力。程序可以把它自己分隔線(xiàn)程的概念的核心對(duì)象縹募潯拖叱,用戶(hù)資源綞曰翱蠔妥址
9、,試如進(jìn)程的其它資源,如文件句柄、線(xiàn)程句柄進(jìn)程的環(huán)境變量 堆棧單元。凇曰圈圖在服務(wù)器環(huán)境下的線(xiàn)程 ·每個(gè)線(xiàn)程都有自身的堆棧以便在函數(shù)調(diào)用和其他進(jìn)程中使用。指針的形式存在。參數(shù)實(shí)際上是在線(xiàn)程堆棧之中的。用戶(hù)自己編寫(xiě)控制信號(hào)量的函數(shù)。當(dāng)進(jìn)程中的線(xiàn)程訪(fǎng)問(wèn)預(yù)先制定的內(nèi)存空間時(shí),操作系統(tǒng)會(huì)調(diào)用系統(tǒng)默認(rèn)的或用戶(hù)自定義的信號(hào)量函數(shù),保證數(shù)據(jù)的完整性與正確性。線(xiàn)程可以簡(jiǎn)化程序設(shè)計(jì)和實(shí)現(xiàn),也可以提高性能,但在使用線(xiàn)程時(shí)需要注意的是確保共同資源不被同時(shí)修改且盡在需要的時(shí)候運(yùn)行線(xiàn)程。也就是說(shuō),在運(yùn)用,線(xiàn)程的時(shí)候,要注意同步問(wèn)題。這樣描述似乎有些抽象,圖描述了非同步線(xiàn)程共享內(nèi)存時(shí)出現(xiàn)問(wèn)題的一種形式。上圖描述
10、的是一個(gè)典型的并行程序帶來(lái)的危害。大致問(wèn)題是這樣的:有兩個(gè)線(xiàn)程運(yùn)行了相同的代碼,這段代碼很簡(jiǎn)單: 這段代碼的意思是將黽觢,假設(shè)某跏賈凳。我們知道,若是在普信號(hào)量錄。多個(gè)線(xiàn)程在同一互斥體上等待的情況。創(chuàng)建或者打開(kāi)成功時(shí),它就處于基態(tài)了,直到它被釋放,才會(huì)變?yōu)榧ぐl(fā)態(tài)。而獲法,具體到互斥體中來(lái)說(shuō),只有當(dāng)一個(gè)互斥體沒(méi)有被任何線(xiàn)程擁有的時(shí)候,信號(hào)量會(huì)在信號(hào)量上執(zhí)行取走或者置入的操作,這些操作會(huì)自動(dòng)的遞減或者遞增信號(hào)量互斥的,而是允許特定數(shù)量的線(xiàn)程同時(shí)在臨界區(qū)中執(zhí)行。信號(hào)量通常用于保護(hù)容 量上有限的系統(tǒng)資源。與互斥體不同的是,信號(hào)量不應(yīng)該認(rèn)為是由某個(gè)特定線(xiàn)程類(lèi)似,這兩個(gè)函數(shù)也是用來(lái)創(chuàng)建和釋放內(nèi)核對(duì)象的。而
11、線(xiàn)程獲得信號(hào)量的規(guī)則與通常的內(nèi)核對(duì)象是一樣的:計(jì)數(shù)值非斃藕帕看詡壞剖滴,信號(hào)量就處于基態(tài)。事件在操作系統(tǒng)中,事件分為兩種:自動(dòng)重置事件和手動(dòng)重置事件。這兩種事件之間的差異是:自動(dòng)重置事件處于激發(fā)態(tài)時(shí)只有一個(gè)線(xiàn)程能夠看到這個(gè)信號(hào),當(dāng)這個(gè)線(xiàn)程觀(guān)察到這個(gè)激發(fā)態(tài)信號(hào)時(shí),自動(dòng)重置事件會(huì)自動(dòng)的切換到基態(tài)。與互斥體不同的是,事件不屬于任何線(xiàn)程,而且任何線(xiàn)程都可以設(shè)置事件。若自動(dòng)重置事件處于激發(fā)態(tài)時(shí),系統(tǒng)只會(huì)喚醒一個(gè)線(xiàn)程。而手動(dòng)重置事件則不同,其事件和重置事件。函數(shù)可以使某個(gè)事件立即處于激發(fā)態(tài),而函數(shù)則使事件立即處于基態(tài)。消息機(jī)制和兩個(gè)參數(shù)琇組成。消息的參數(shù)中包含有重要的信息。例如,對(duì)鼠標(biāo)消息而言,中一般包含
12、鼠標(biāo)的位置信息,而參數(shù)中包含了發(fā)生該消息時(shí),、等鍵的狀態(tài)信息,對(duì)于不同的消息類(lèi)型來(lái)說(shuō),兩個(gè)參數(shù)也都相應(yīng)地具有明確意義。 之中的。;消息也就是上面出現(xiàn)的峁梗導(dǎo)噬暇褪荳內(nèi)設(shè)的一種數(shù)據(jù)結(jié)構(gòu)的格式:騯;表消息的組成含義區(qū)分消息的類(lèi)別參數(shù)鼠標(biāo)的位置 消息隊(duì)列圖符、光標(biāo)、窗口類(lèi)、菜單等等。當(dāng)一個(gè)線(xiàn)程調(diào)用一個(gè)函數(shù)來(lái)建立某個(gè)對(duì)象時(shí),則該對(duì)象就歸這個(gè)線(xiàn)程的進(jìn)程所擁有。這樣,當(dāng)進(jìn)程結(jié)束時(shí),如果沒(méi)有明確刪除這個(gè)對(duì)象,則操作系統(tǒng)會(huì)自動(dòng)刪除這個(gè)對(duì)象。對(duì)窗口和掛鉤這兩種對(duì)象,它們分別由建立窗口和安裝掛鉤的線(xiàn)程所擁有。如果一個(gè)線(xiàn)程建立一個(gè)窗口或安裝一個(gè)掛鉤,然后線(xiàn)程結(jié)束,操作系統(tǒng)會(huì)自動(dòng)刪除窗口或卸載掛鉤。這種線(xiàn)程擁有關(guān)系的
13、概念對(duì)窗口有重要的意義:建立窗口的線(xiàn)程必須是為窗口處理所有消息的線(xiàn)程。為了使這個(gè)概念更加明確具體,可以假設(shè)一個(gè)線(xiàn)程建立了一個(gè)窗口,然后就結(jié)束了。在這種情況下,窗口不會(huì)收到一個(gè)或這也意味著每個(gè)線(xiàn)程,如果它至少建立了一個(gè)窗口,都由系統(tǒng)對(duì)它分配一個(gè)消息隊(duì)列。這個(gè)隊(duì)列用于窗口消息的派送。為了使窗口接收這些消息,線(xiàn)程必須有它自己的消息循環(huán)。本章要考查每個(gè)線(xiàn)程的消息隊(duì)列。特別是要看看消息是如何被放置在隊(duì)列中的,以及線(xiàn)程如何從隊(duì)列中取出消息并處理它們。目標(biāo),要保證每個(gè)線(xiàn)程運(yùn)行在一個(gè)環(huán)境中,在這個(gè)環(huán)境中每個(gè)線(xiàn)程都相信自己是唯一運(yùn)行的線(xiàn)程。更確切地說(shuō),每個(gè)線(xiàn)程必須有完全不受其他線(xiàn)程影響的消息隊(duì)列。而且,每個(gè)線(xiàn)程
14、必須有一個(gè)模擬環(huán)境,使線(xiàn)程可以維持它自己的鍵盤(pán)焦點(diǎn)、窗口激活、鼠標(biāo)捕獲等概念。當(dāng)一個(gè)線(xiàn)程第一次被建立時(shí),系統(tǒng)假定線(xiàn)程不會(huì)被用于任何與用戶(hù)相關(guān)的任務(wù)。這樣可以減少線(xiàn)程對(duì)系統(tǒng)資源的要求。但是,一旦這個(gè)線(xiàn)程調(diào)用一個(gè)與圖形用戶(hù)界面有關(guān)的函數(shù)緙觳樗南恿謝蚪桓齟翱,系統(tǒng)就會(huì)為該線(xiàn)程分配一些另外的資源,以便它能夠執(zhí)行與用戶(hù)界面有關(guān)的任務(wù)。特別是,系統(tǒng)分配一個(gè)結(jié)構(gòu),并將這個(gè)數(shù)據(jù)結(jié)構(gòu)與線(xiàn)程聯(lián)系起來(lái)。這個(gè)結(jié)構(gòu)包含一組成員變量,利用這組成員,線(xiàn)程可以認(rèn)為它是在自己獨(dú)占的環(huán)境中運(yùn)行。是一個(gè)內(nèi)部的、未公開(kāi)的數(shù)據(jù)結(jié)構(gòu),、發(fā)送消息隊(duì)列 、應(yīng)答消息隊(duì)列、虛擬輸入隊(duì)列態(tài)的若干變量。圖描述了結(jié)構(gòu)和與之相聯(lián)系的線(xiàn)程。圖線(xiàn)程及其相關(guān)
15、的結(jié)構(gòu)消息隊(duì)列狀態(tài)一個(gè)線(xiàn)程的消息隊(duì)列中可能有很多個(gè)消息等待處理,我們可以通過(guò)調(diào)用函數(shù)表標(biāo)志取值及含義標(biāo)志隊(duì)列中的消息、鼠標(biāo)按鍵的按下、單擊、雙擊等消息登記的消息煌謨布淙朧錄。當(dāng)隊(duì)列在期望的消息過(guò)濾器范圍內(nèi)沒(méi)有登記的消息時(shí),這個(gè)標(biāo)志要消除。除此之外,這個(gè)標(biāo)志與 登記的消息煌謨布淙朧錄。當(dāng)隊(duì)列完全沒(méi)有登記的消息時(shí)諶魏蝸似鞣段,該標(biāo)志被清除。除此之外,該標(biāo)志與相同甴文件中沒(méi)有。它由系統(tǒng)在內(nèi)部使用由另一個(gè)線(xiàn)程發(fā)送的消息不是所有的喚醒標(biāo)志都由系統(tǒng)平等對(duì)待。對(duì)于當(dāng)線(xiàn)程的登記消息隊(duì)列中至少有一個(gè)消息時(shí),設(shè)置。這不包括線(xiàn)程的虛擬輸入隊(duì)列中的硬件事件消息。當(dāng)線(xiàn)程的登記消息隊(duì)列中的所有消息都已經(jīng)處理,隊(duì)列變空時(shí),
16、這個(gè)標(biāo)志被復(fù)位。每當(dāng)一個(gè)定時(shí)器上叱趟報(bào)時(shí),返回蠺消息。并且函數(shù)也不返回這個(gè)標(biāo)志的狀態(tài)。消息隊(duì)列中提取消息的方法態(tài)標(biāo)志的情況,并確定應(yīng)該處理哪個(gè)消息。圖和下面敘述的步驟說(shuō)明了系統(tǒng)是如何確定線(xiàn)程應(yīng)該處理的下一個(gè)消息的情況【】。如果理完消息之后不返回到線(xiàn)程,這些函數(shù)要等待其他要處理的消息。 硬件輸入消息。如果標(biāo)志被設(shè)置,或O嚶拇應(yīng)用程序的開(kāi)發(fā)方法一種教驢7姆絞蕉加釁溆帕櫻窘謚饕=檣苡肳三種方 貿(mào)絳蟣喑探涌是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開(kāi)發(fā)人員基于某軟件或硬件的以訪(fǎng)問(wèn)一組例程的能力,而又無(wú)需訪(fǎng)問(wèn)源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。位操作系系統(tǒng)服務(wù)函數(shù):實(shí)現(xiàn)與操作系統(tǒng)相關(guān)的一些函數(shù),如線(xiàn)程、進(jìn)程
17、的控制等。最后以編譯器整合為一個(gè)完成的應(yīng)用程序,如圖所示。這種資源的實(shí) 際內(nèi)容拼是借助各種工具產(chǎn)生,并以各種擴(kuò)展名的文件存在的,如些靜態(tài)庫(kù),如琸等。只需包含這一個(gè)文件即可。些部分基本是一樣的,也基本不用改動(dòng)。只有最后一部分,窗口處理函數(shù)才是,方法對(duì)程序員要求很高,無(wú)論是他關(guān)注的還是不關(guān)注的部分,程序員都需要將程直接完成自己想要做的,自由度比較大。 這時(shí),陀碩恕庫(kù)且桓鲆訡類(lèi)的形式封裝了腁,并且包含一個(gè)應(yīng)用程序框架,開(kāi)發(fā)程序時(shí)的應(yīng)用程序框架已經(jīng)在這個(gè)類(lèi)視圖中完成了。圖程序員什么代碼也不用寫(xiě),只需要點(diǎn)幾下按鈕就可以生成一個(gè)可以運(yùn)行的應(yīng)用程序了。接下來(lái)的工作就是專(zhuān)注于開(kāi)發(fā)自己想要的應(yīng)用程序風(fēng)格,而不用
18、管更下層的機(jī)理。 ·類(lèi)向?qū)В涸趹?yīng)用程序向?qū)傻墓歉沙绦蛑蟹奖愕男薷脑创a,可以創(chuàng)建圖這樣,通過(guò)作系統(tǒng)鏜有如下核心的功能【】:·與現(xiàn)有代碼的全面互操作性:榻n梢雜虢閑碌模甆應(yīng)用程序合在一起,反之亦然。同樣, ·在喑逃镅災(zāi)浼桑海甆支持跨語(yǔ)言的繼承、跨語(yǔ)言的錯(cuò)誤處理以及跨語(yǔ)言的代碼調(diào)試。嘈涂餳耙訡為中心的堇嘈馱詒鏡兀甆二進(jìn)制文件元。而且,市磽桓鱸祝甦的多個(gè)版本融洽的存在于一臺(tái)機(jī)器上。換成原始機(jī)械碼。所有伎刪桑甆自我表述。圖教牧硪桓齬辜榫褪槍ü怖嘈拖低,。何彼此交互,以及如何使用J莞癖硎舅塹南附凇模甆支持語(yǔ)言可能不支持宓乃泄埽ü燦镅怨娣珻且桓齠逅校甆
19、語(yǔ)言都認(rèn)同的公共類(lèi)型和編程結(jié)構(gòu)子集的相關(guān)規(guī)范。因此,如果構(gòu)建僅提供與嬡蕕墓艿模甆類(lèi)型,就可以確保 第三章系統(tǒng)應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)第三章系統(tǒng)應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)從宏觀(guān)上來(lái)說(shuō),本系統(tǒng)可以分成兩個(gè)模塊:應(yīng)用程序模塊和驅(qū)動(dòng)模塊。應(yīng)用程序?qū)?shù)據(jù)產(chǎn)生后發(fā)送給驅(qū)動(dòng)程序,而驅(qū)動(dòng)程序則直接操作硬件,通過(guò)硬件將數(shù)據(jù)發(fā)出。本章專(zhuān)注于介紹應(yīng)用程序部分,而驅(qū)動(dòng)程序在后面章節(jié)有詳述。對(duì)于高幀頻圖像輸出系統(tǒng)而言,上層的應(yīng)用程序有三個(gè)作用:產(chǎn)生每一幀需上層應(yīng)用總體分析前文中已經(jīng)提到本系統(tǒng)的上層應(yīng)用程序的三個(gè)作用,對(duì)于每個(gè)作用,系統(tǒng)都有相應(yīng)的要求。不同的要求在實(shí)現(xiàn)的時(shí)候用到的方法是不一樣的,那么在實(shí)現(xiàn)整個(gè)系統(tǒng)之前明確各個(gè)部分的
20、要求是必不可少的工作。圖像數(shù)據(jù)產(chǎn)生的要求幀率要求產(chǎn)生圖像數(shù)據(jù)是上層應(yīng)用的主要工作,也是整個(gè)系統(tǒng)的核心。對(duì)于本系統(tǒng)而言,高幀頻是其一大特點(diǎn),也是設(shè)計(jì)系統(tǒng)是需要重點(diǎn)考慮的問(wèn)題。由于系統(tǒng)產(chǎn)生的圖像的幀率可能會(huì)很高,那么對(duì)于數(shù)據(jù)產(chǎn)生部分的要求就應(yīng)該是在一定的時(shí)間內(nèi)必須完成圖像數(shù)據(jù)的生成。對(duì)于幀率的另一個(gè)要求就是可調(diào)性,也就是說(shuō)幀率是在一定范圍內(nèi)變化的。目標(biāo)要求本系統(tǒng)對(duì)于圖像的內(nèi)容有一定的要求,因?yàn)橄到y(tǒng)要產(chǎn)生目標(biāo)運(yùn)動(dòng)的圖像,那么該系統(tǒng)則應(yīng)有一個(gè)確定的目標(biāo)。這個(gè)目標(biāo)可以是一個(gè)簡(jiǎn)單的幾何圖形,也可以是一個(gè)虛擬物體的模型。這個(gè)目標(biāo)本身應(yīng)該是可以運(yùn)動(dòng)的,而且是可以沿著一定軌跡來(lái)運(yùn)動(dòng)的。在整個(gè)場(chǎng)景產(chǎn)生的過(guò)程中,目
21、標(biāo)的類(lèi)型,大小,運(yùn)動(dòng)軌跡,運(yùn)動(dòng)速率都應(yīng)該是可以調(diào)整的。背景要求目標(biāo)運(yùn)動(dòng)一定是在一個(gè)特定的背景內(nèi)來(lái)完成的,那么背景的也是這個(gè)系統(tǒng)需要生成的圖像的一部分。一般來(lái)說(shuō),背景可以是簡(jiǎn)單的單一灰度。當(dāng)然,復(fù)雜的 像序列。圖數(shù)據(jù)生成部分的要求示意圖在人和機(jī)器的互動(dòng)過(guò)程中,有一個(gè)層面,即我們所說(shuō)的界面。從心理學(xué)意義來(lái)分,界面可分為感覺(jué)泳酢酢醯和情感兩個(gè)層次。用戶(hù)界面設(shè)計(jì)是屏幕產(chǎn)品的重要組成部分。界面設(shè)計(jì)是一個(gè)復(fù)雜的有不同學(xué)科參與的工程,認(rèn)知心理學(xué)、設(shè)計(jì)學(xué)、語(yǔ)言學(xué)等在此都扮演著重要的角色。用戶(hù)界面設(shè)計(jì)的三大原則是:置界面于用戶(hù)的控制之下;減少用戶(hù)的記憶負(fù)擔(dān);保持界面的一致性。界面設(shè)計(jì)從流程上分為結(jié)構(gòu)設(shè)計(jì)、交互設(shè)
22、計(jì)和視覺(jué)設(shè)計(jì)三部分。結(jié)構(gòu)設(shè)計(jì)要求圖結(jié)構(gòu)設(shè)計(jì)的內(nèi)容 第三章系統(tǒng)應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)結(jié)構(gòu)設(shè)計(jì)也稱(chēng)概念設(shè)計(jì),是界面設(shè)計(jì)的框架。通過(guò)對(duì)用戶(hù)研究和任務(wù)分析,制定出產(chǎn)品的整體架構(gòu)。在結(jié)構(gòu)設(shè)計(jì)中,目錄體系的邏輯分類(lèi)和語(yǔ)詞定義是用戶(hù)易于理解和操作的重要前提。在本系統(tǒng)中,結(jié)構(gòu)設(shè)計(jì)從宏觀(guān)上看來(lái)可以分為控制,設(shè)置和顯示三個(gè)部分。其中控制描述的是用戶(hù)對(duì)系統(tǒng)運(yùn)行狀態(tài)的控制;設(shè)置則是用戶(hù)對(duì)系統(tǒng)參數(shù)設(shè)置的借口;顯示部分是系統(tǒng)將輸出反饋給用戶(hù)的一個(gè)過(guò)程。圖顯示了本文中結(jié)構(gòu)設(shè)計(jì)的框架。交互設(shè)計(jì)要求交互設(shè)計(jì)的目的是使產(chǎn)品讓用戶(hù)能簡(jiǎn)單使用。任何產(chǎn)品功能的實(shí)現(xiàn)都是通過(guò)人和機(jī)器的交互來(lái)完成的。因此,人的因素應(yīng)作為設(shè)計(jì)的核心被體現(xiàn)出來(lái)。
23、交互設(shè)計(jì)的原則為:有清楚的錯(cuò)誤提示;讓用戶(hù)控制界面,提供多層次選擇;允許兼用鼠標(biāo)和鍵盤(pán);允許工作中斷;使用用戶(hù)的語(yǔ)言,而非技術(shù)的語(yǔ)言;提供快速反饋;方便退出;在本文中,界面的交互部分有以下要求:程序可以顯示當(dāng)前的幀率。視覺(jué)設(shè)計(jì)是在結(jié)構(gòu)設(shè)計(jì)的基礎(chǔ)上,參照目標(biāo)群體的心理模型和任務(wù)達(dá)成進(jìn)行視覺(jué)設(shè)計(jì)。包括色彩、字體、頁(yè)面等。視覺(jué)設(shè)計(jì)要達(dá)到用戶(hù)愉悅使用的目的。視覺(jué)設(shè)計(jì)的原則如下:界面清晰明了;減少短期記憶的負(fù)擔(dān);依賴(lài)認(rèn)知而非記憶;提供視覺(jué)線(xiàn)索;提供默認(rèn)、撤銷(xiāo)、恢復(fù)的功能;提供界面的快捷方式;盡量使用真實(shí)世界的比喻;完善視覺(jué)的清晰度;界面的協(xié)調(diào)一致;同樣功能用同樣的圖形:色彩與內(nèi)容,應(yīng)圖像顯示要求在本系統(tǒng)
24、中,圖像顯示只作為用戶(hù)直觀(guān)的看到生成圖像的結(jié)果,而不需要任 隔幀顯示實(shí)際就是在高幀頻的圖像數(shù)據(jù)流中抽取出來(lái)一部分幀來(lái)顯示。這樣抽取出來(lái)顯示的圖像數(shù)據(jù)流幀率就會(huì)下降。如。氳耐枷袷菸頤敲幀抽出一幀來(lái)顯示,那么得到的圖像幀率就會(huì)變成幀秒。那么我們就應(yīng)該對(duì)實(shí)際顯示的幀率有一定要求,否則就會(huì)出現(xiàn)圖像視頻不流暢的情況。一般來(lái)說(shuō)我們都是以幀秒的幀率來(lái)顯示圖像的。應(yīng)用程序的框架設(shè)計(jì)系統(tǒng)模塊設(shè)計(jì)圖系統(tǒng)模塊設(shè)計(jì)框圖圖為整個(gè)系統(tǒng)的模塊設(shè)計(jì)框圖。其中用戶(hù)輸入的參數(shù)首先傳入到用戶(hù)操作模塊處理。用戶(hù)操作模塊主要負(fù)責(zé)處理用戶(hù)輸入的各種消息,將用戶(hù)的意圖轉(zhuǎn)化為操作或者數(shù)據(jù),以一個(gè)結(jié)構(gòu)的形式傳遞給數(shù)據(jù)生成模塊。數(shù)據(jù)生成模塊顧名
25、思義就是要根據(jù)界面模塊傳遞進(jìn)來(lái)的參數(shù)生成一幀圖像數(shù)據(jù)。但是其工作不僅如此,該模塊還要負(fù)責(zé)將數(shù)據(jù)封裝成已經(jīng)提前定義好的格式傳遞給底層驅(qū)動(dòng),最終通過(guò) 第三章系統(tǒng)應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)用戶(hù)圖形界面部分涉及到的問(wèn)題有兩個(gè)。一個(gè)是正確的獲取用戶(hù)對(duì)系統(tǒng)的輸入,另一個(gè)是正確的顯示系統(tǒng)的輸出。處理輸入用戶(hù)操作模塊完成了整個(gè)程序?qū)斎氲奶幚?,并且這個(gè)模塊要負(fù)責(zé)將輸入以一定的格式傳給后面的數(shù)據(jù)生成模塊。前面一節(jié)對(duì)系統(tǒng)輸入的要求已經(jīng)討論的很清楚了,那么在處理輸入的時(shí)候我們將輸入分為兩類(lèi):運(yùn)行前設(shè)置的參數(shù)和運(yùn)行時(shí)實(shí)時(shí)調(diào)整的參數(shù)。這兩類(lèi)輸入在實(shí)現(xiàn)的時(shí)候是用不同方式來(lái)完成的。圖用戶(hù)操作模塊原理框圖圖描述了用戶(hù)操作模塊的原理
26、框圖。圖中描述了四個(gè)部分,包括顯示方式,程序的操作,設(shè)置速率和設(shè)置初始化參數(shù)。其中前三部分全部都是可以在運(yùn)行時(shí)調(diào)節(jié)的參數(shù),只有設(shè)置初始化參數(shù)這一部分是運(yùn)行前必須設(shè)置好的。那么,在實(shí)現(xiàn)的時(shí)候,初始化參數(shù)就只需要在運(yùn)行時(shí)傳給數(shù)據(jù)生成模塊,而其它三部分的參數(shù)則需要每一幀都傳一次,這樣才能保證可以動(dòng)態(tài)的在運(yùn)行時(shí)改變參數(shù)。用戶(hù)操作模塊在獲得用戶(hù)參數(shù)是還需要注意的一點(diǎn)就是檢查用戶(hù)輸入的合法性。比如,用戶(hù)在對(duì)背景灰度設(shè)置的時(shí)候設(shè)不小心敲入了一個(gè)負(fù)號(hào),那么灰度值可能就會(huì)變成一個(gè)負(fù)數(shù),這樣的輸入顯然是不合法的,如果將這樣一個(gè)非法的數(shù)據(jù)傳入了后面的模塊,則會(huì)給系統(tǒng)帶來(lái)不可預(yù)知的問(wèn)題,導(dǎo)致了系統(tǒng)穩(wěn)定性的下降。因此,
27、在設(shè)計(jì)用戶(hù)輸入模塊的時(shí)候必須要考慮輸入的合法性問(wèn)題,并且要在界面上反饋給用戶(hù)錯(cuò)誤的信息。再做完輸入合法性檢查之后,系統(tǒng)用戶(hù)操作模塊就應(yīng)該將輸入的數(shù)據(jù)以一定的格式傳給后面的模塊。具體的格式由于實(shí)現(xiàn)的不同可能會(huì)有一些差異,但是大體上是將前面提到的兩種不同的分類(lèi)分別組織成兩種結(jié)構(gòu)分別傳輸。顯示輸出 顯示輸出部分主要負(fù)責(zé)顯示生成的圖像數(shù)據(jù),其主要的作用是為了讓用戶(hù)直上的,因此這個(gè)模塊主要設(shè)計(jì)的問(wèn)題就是隔幀顯示。鰭翟幀第三組圖分成四組:在生成每一幀圖像的時(shí)候,該模塊需要獲得圖像參數(shù)的信息。其中,有些參數(shù)是在運(yùn)行前就已經(jīng)設(shè)置好,傳入該模塊的;而另一些參數(shù)是每幀都有可能變化的,這些參數(shù)就需要每幀都傳入一次。
28、在確定每一幀參數(shù)之后,就進(jìn)入到真正的畫(huà)圖階段。這里所謂的畫(huà)圖就是指在內(nèi)存中生成圖像數(shù)據(jù)。圖像內(nèi)容有可能是簡(jiǎn)單的直線(xiàn)或者圓,也可能是一些幾何圖形的組合,或者更復(fù)雜的真實(shí)圖像。無(wú)論 第三章系統(tǒng)應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)生成的方法如何,最終要在規(guī)定的時(shí)間內(nèi)將圖像數(shù)據(jù)產(chǎn)生。當(dāng)圖像數(shù)據(jù)產(chǎn)生之后就可以直接將數(shù)據(jù)發(fā)往后端驅(qū)動(dòng)了。數(shù)據(jù)生成模塊的流程本身不是很復(fù)雜,但是在設(shè)計(jì)上應(yīng)該考慮以后實(shí)現(xiàn)的一些問(wèn)題。前文中已經(jīng)提到,本文中的系統(tǒng)將界面與數(shù)據(jù)分成了兩個(gè)完全獨(dú)立的模塊。那么,在具體實(shí)現(xiàn)的時(shí)候,我們可能會(huì)將數(shù)據(jù)生成模塊獨(dú)立的構(gòu)建成一個(gè)文它與界面部分通信完全是被動(dòng)的,是由界面部分控制的。:用戶(hù)行為用戶(hù)界面模塊數(shù)據(jù)生成模塊
29、刀:圖用戶(hù)界面模塊控制數(shù)據(jù)生成模塊圖是界面模塊和數(shù)據(jù)生成模塊之間交互的過(guò)程。首先用戶(hù)的行為會(huì)被用戶(hù)界面模塊捕獲,用戶(hù)界面模塊就會(huì)通知數(shù)據(jù)生成模塊,令其生成相應(yīng)的數(shù)據(jù)。當(dāng)數(shù)據(jù)生成好之后,數(shù)據(jù)生成模塊就會(huì)反饋個(gè)界面一個(gè)信息,這時(shí)候界面就知道數(shù)據(jù)已經(jīng)生成了。因此,數(shù)據(jù)生成模塊在整個(gè)體系中處于一個(gè)被告知,被調(diào)用的行為之中。應(yīng)用程序界面的實(shí)現(xiàn)當(dāng)系統(tǒng)的要求和框架都已經(jīng)確定之后,下一步的工作就是具體實(shí)現(xiàn)系統(tǒng)了。實(shí)現(xiàn)一個(gè)系統(tǒng)和設(shè)計(jì)一個(gè)框架所考慮的問(wèn)題是截然不同的。在前一節(jié)設(shè)計(jì)框架的內(nèi)容中,我們重點(diǎn)考慮的問(wèn)題是如何將系統(tǒng)按照其功能劃分成一個(gè)一個(gè)的模塊,模塊之間的關(guān)系是如何的。而在從本節(jié)開(kāi)始,我們所要討論的內(nèi)容是
30、這些功能模塊搭建的流程是什么,用具體的代碼是如何來(lái)組建的,這些模塊之間的通信和同步在具體的操作系統(tǒng)下是如何完成的等等一系列具體的問(wèn)題。本節(jié)主要論述如何編程實(shí)現(xiàn)系統(tǒng)應(yīng)用程序的界面。前一節(jié)我們已經(jīng)知道,系統(tǒng)的界面是與數(shù)據(jù)分開(kāi)的,之所以這樣,就是因?yàn)橥瑯拥臄?shù)據(jù)生成模塊可以有不同的界面顯示,或者說(shuō)對(duì)于同樣的數(shù)據(jù)生成模塊而言,只要接口不變,界面部分可以是不同的樣子,甚至于界面可以是不同編程語(yǔ)言實(shí)現(xiàn)的。 撓攀莆猈開(kāi)發(fā)開(kāi)辟了一片新天地,同時(shí)也借助應(yīng)用程序向?qū)归_(kāi)發(fā)者擺脫離了那些每次都必寫(xiě)基本代碼,借助類(lèi)向?qū)Ш拖⒂成涫归_(kāi)發(fā)者擺脫了定圖界面程序的基本流程圖圖 第三章系統(tǒng)應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)本身結(jié)束后。這一點(diǎn)正
31、符合我們?cè)O(shè)計(jì)的要求,我們絕對(duì)不允許用戶(hù)在程序運(yùn)行的調(diào)節(jié)的參數(shù)詼曰翱蚰謨幸恍淥目丶鏑琓等都用的是峁謀曜伎丶允徑曰翱虻氖焙蛑恍枰T諍鮮實(shí)奈恢玫饔肕的函數(shù)參數(shù)設(shè)置對(duì)話(huà)框。從圖中可以看到在對(duì)話(huà)框中,我們將一些需要初始化設(shè)置的參數(shù)都以各種控件的形式表達(dá)了出來(lái)。在顯示圖像的時(shí)候,本系統(tǒng)需要有兩個(gè)視圖。一個(gè)視圖是直接用來(lái)顯示生成的圖像;另一個(gè)視圖用來(lái)顯示通過(guò)蹇ù涑齪笤倩夭傻耐枷主要目的是這種窗口可以拆分出數(shù)個(gè)窗口,每個(gè)窗口可以映射到文檔的任何位置,窗口和窗口之間確實(shí)彼此獨(dú)立的。拆分窗口需要一個(gè)類(lèi),這個(gè)類(lèi)是峁摹提供的拆分共有兩種:動(dòng)態(tài)拆分和靜態(tài)拆分。動(dòng)態(tài)拆分的操作比較簡(jiǎn)單,但是它除了擁有“動(dòng)態(tài)”增加
32、窗口的優(yōu)勢(shì)之外,有兩個(gè)劣勢(shì):第一,每一個(gè)窗口都使用相同的,因此顯示出來(lái)的東西千篇一律;第二,窗口之間并非完全獨(dú)立。相反,靜態(tài)拆分窗口的窗口數(shù)一開(kāi)始就固定了,各個(gè)子窗口所使用的必須在窗口拆分之前就準(zhǔn)備好。每一個(gè)窗口的活動(dòng)完全獨(dú)立自主,有完全屬于自己的水平滾動(dòng)條和垂直滾動(dòng)條。類(lèi)型的變量。然后在:函數(shù)中創(chuàng)建并顯示拆分的窗口,以下是部分示意代碼。;,;琾; 圖程序界面控制的狀態(tài)轉(zhuǎn)移 第三章系統(tǒng)應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)一些。軟公司引入了一種嶄新的編程語(yǔ)言:功能:·對(duì)繼承與多態(tài)的全面支持。·定義類(lèi)、結(jié)構(gòu)、枚舉、委托和接口的強(qiáng)類(lèi)型關(guān)鍵字。因?yàn)橛羞@些關(guān)鍵字,對(duì)基于界面的編程技術(shù)的全面支持:集成
33、開(kāi)發(fā)環(huán)境提供了許多圖形設(shè)計(jì)器,是的構(gòu)建的過(guò)程變得的程序是在可視化編輯器里面看不到窗口的,程序員要相對(duì)窗口做任何的操作都屬性和控件的布局進(jìn)行可視化的配置,這樣大大簡(jiǎn)化了程序員的工作量,提高了開(kāi)發(fā)效率。勰簿黔漆加控懌哺援圖疧工具箱中的容器 示,用戶(hù)可以直接在可視化的編輯器內(nèi)通過(guò)簡(jiǎn)單的鼠標(biāo)操作將該容器直接加入窗口之中,用戶(hù)可以更專(zhuān)注于編寫(xiě)自己的代碼,而不用管的實(shí)現(xiàn)。添加菜單和對(duì)話(huà)框這樣的代碼有一個(gè)缺陷,就是當(dāng)用戶(hù)在對(duì)話(huà)框中設(shè)置了一些參數(shù),下一次在我們?cè)趯?duì)話(huà)框中做的任何改變都會(huì)被保留,因?yàn)檫@個(gè)對(duì)話(huà)框一直是存在的,不會(huì) 第三章系統(tǒng)應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)調(diào)用數(shù)據(jù)生成模塊文件。而這里的界面是用教碌撓镅鑰7摹埽
34、甆庫(kù)圖甆支持的編譯器都發(fā)出也指令和元數(shù)據(jù)由于絳蠐隬程序本質(zhì)完全不同,調(diào)用動(dòng)態(tài)庫(kù)的時(shí)候需要聲明函數(shù)。聲明格式如下:發(fā)”“【】們珺 生成界面的效果圖應(yīng)用程序數(shù)據(jù)生成模塊實(shí)現(xiàn)誤差太大。該方法是通過(guò)響應(yīng)程序界面會(huì)“假死”,大大降低用戶(hù)體驗(yàn)。 第三章系統(tǒng)應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)受的。從本質(zhì)上講,運(yùn)用畝逼鞫薊崾艿絎多任務(wù)和調(diào)度的影其實(shí)這樣做的原理很簡(jiǎn)單,前提是硬件板卡要周期性的給驅(qū)動(dòng)程序一個(gè)通知,而這個(gè)周期可以做到很精確爰。我們上層程序用一個(gè)無(wú)限循環(huán),循環(huán)體內(nèi)在不停地調(diào)用底層驅(qū)動(dòng)程序的某一個(gè)函數(shù),而驅(qū)動(dòng)程序的這個(gè)函數(shù)是只有在接收到底層硬件通知之后才返回的,否則就會(huì)一直等待而不返回。我們稱(chēng)這樣的調(diào)用方式為同步調(diào)
35、用,這樣做導(dǎo)致的結(jié)果就是上層應(yīng)用程序的循環(huán)也是一個(gè)周期執(zhí)行一次,于是就可以產(chǎn)生非常精確的定時(shí)了。運(yùn)用這樣的方式精確定時(shí)的問(wèn)題就可以解決了,但是又會(huì)帶來(lái)另一個(gè)問(wèn)題:我們的程序中有一個(gè)無(wú)限循環(huán),程序的界面永遠(yuǎn)也得不到響應(yīng)了。然而,這樣的問(wèn)題是可以用多線(xiàn)程技術(shù)輕而易舉的解決的。兩個(gè)線(xiàn)程:界面線(xiàn)程和數(shù)據(jù)線(xiàn)程。界面線(xiàn)程即為前一節(jié)所實(shí)現(xiàn)的一切,在此不做贅述,而數(shù)據(jù)線(xiàn)程即為數(shù)據(jù)生成模塊的實(shí)現(xiàn)形式。在生成數(shù)據(jù)的時(shí)候,我們調(diào)用了驅(qū)動(dòng)程序的一個(gè)函數(shù)。這個(gè)函數(shù)的主要功能就是從應(yīng)用程序向底層驅(qū)動(dòng)傳輸數(shù)據(jù)。同時(shí),這個(gè)函數(shù)還扮演了上文中提到的同步調(diào)用的函數(shù)功能,也就是說(shuō)我們?cè)谙蝌?qū)動(dòng)程序傳數(shù)據(jù)的時(shí)候,每傳一幀的圖像數(shù)據(jù),必
36、須等到一定時(shí)間過(guò)后這個(gè)函數(shù)才會(huì)返回。這樣,我們就用兩個(gè)線(xiàn)程完成了程序精確定時(shí)的功能,從而正確的傳輸了數(shù)據(jù)。當(dāng)我們將數(shù)據(jù)生成模塊獨(dú)立成一個(gè)線(xiàn)程來(lái)實(shí)現(xiàn)的時(shí)候,我們就應(yīng)該考慮如何正確的生成圖像數(shù)據(jù)了。圖像數(shù)據(jù)在編程的角度看來(lái)就是一個(gè)一維數(shù)組,數(shù)組中的元素就是按照行遍歷圖像每個(gè)像素的值。那么,在這樣一個(gè)一維數(shù)組上畫(huà)圖是有些復(fù)雜的。直線(xiàn)和矩形相對(duì)來(lái)說(shuō)簡(jiǎn)單,圓和橢圓就會(huì)復(fù)雜一些,其他的不規(guī)則 我們使用內(nèi)存是按照如下步驟完成繪圖的:腁繪制圖像。獲取內(nèi)存中的圖像數(shù)據(jù)。這時(shí)要調(diào)用峁腉函數(shù)獲得。釋放資源。這樣,我們的數(shù)據(jù)生成模塊就可以完成了。但是,在整個(gè)系統(tǒng)之中,數(shù)據(jù)生動(dòng)態(tài)鏈接庫(kù) 第三章系統(tǒng)應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)有
37、助于應(yīng)用程序的本地化;有助于解決平臺(tái)差異;本系統(tǒng)中用到動(dòng)態(tài)庫(kù)主要是為了導(dǎo)出函數(shù),由其他可執(zhí)行程序唇緱娉絳調(diào)用。在本文中是這樣生成動(dòng)態(tài)鏈接庫(kù)的:用的向?qū)?chuàng)建一個(gè)動(dòng)態(tài)導(dǎo)出的函數(shù);在源文件中實(shí)現(xiàn)需要導(dǎo)出的函數(shù)。 第四章系統(tǒng)驅(qū)動(dòng)的程序設(shè)計(jì)與實(shí)現(xiàn)第四章系統(tǒng)驅(qū)動(dòng)的程序設(shè)計(jì)與實(shí)現(xiàn)驅(qū)動(dòng)程序?qū)τ谡麄€(gè)系統(tǒng)而言扮演了一個(gè)承上啟下的角色,它將上層應(yīng)用程序與底層硬件連接起來(lái)。在現(xiàn)代的操作系統(tǒng)中,應(yīng)用程序沒(méi)絳是沒(méi)有權(quán)限直接操作硬件的,必須通過(guò)調(diào)用驅(qū)動(dòng)程序諍順絳來(lái)完成與硬件的交互。本章主要介紹在教呂肳驅(qū)動(dòng)模型 卡的傳輸。驅(qū)動(dòng)程序是一種可以使計(jì)算機(jī)和設(shè)備通信的特殊程序,可以說(shuō)相當(dāng)于硬件的接口,操作系統(tǒng)只能通過(guò)這個(gè)接口,才能控
38、制硬件設(shè)備的工作。本節(jié)主要介紹在虛擬設(shè)備驅(qū)動(dòng)程序且桓鲇沒(méi)講考梢允笵應(yīng)用程序訪(fǎng)問(wèn)教系撓布通過(guò)屏蔽疧權(quán)限掩碼來(lái)捕獲端口存取操作,它基本上是模擬硬件操作,這對(duì)于那些直接對(duì)裸機(jī)硬件編程的應(yīng)用程序特別有用。 協(xié)議的內(nèi)核模式驅(qū)動(dòng)程序。絳蚴且恢諴驅(qū)動(dòng)程序,它同時(shí)還遵循電圖顯示驅(qū)動(dòng)程序是用于顯示和打印設(shè)備的內(nèi)核模式驅(qū)動(dòng)程序。文件系統(tǒng)驅(qū)動(dòng)程備而不用其它驅(qū)動(dòng)程序幫助。征。另一個(gè)文件稱(chēng)為迷你驅(qū)動(dòng)程序,它包含類(lèi)驅(qū)動(dòng)程序用于管理設(shè)備實(shí)例的廠(chǎng)商 第四章系統(tǒng)驅(qū)動(dòng)的程序設(shè)計(jì)與實(shí)現(xiàn)專(zhuān)有特征例程。類(lèi)驅(qū)動(dòng)程序和迷你驅(qū)動(dòng)程序合在一起才成為一個(gè)完整的功能驅(qū)動(dòng)程序。我們可以把一個(gè)完整的驅(qū)動(dòng)程序看作是一個(gè)容器,它包含許多例程,當(dāng)操作系統(tǒng)遇
39、到一個(gè)疧請(qǐng)求時(shí),它就調(diào)用這個(gè)容器中的例程來(lái)執(zhí)行該請(qǐng)求的各種操作。個(gè)文件都是文本文件,內(nèi)容如圖所示。圖第興得髑睦嘈褪荳驅(qū)動(dòng)。第行設(shè)置了驅(qū)動(dòng)的源文件。編寫(xiě)完這兩個(gè)文件之后,在說(shuō)醒瘛皒驅(qū)動(dòng)模型中,姹揪褪塹魘園姹荊鳩姹揪褪欠邪姹荊嗨樸赪 通信就成為了重要的內(nèi)容。圖驅(qū)動(dòng)程序與上層和底層之間的關(guān)系子系 第四章系統(tǒng)驅(qū)動(dòng)的程序設(shè)計(jì)與實(shí)現(xiàn)在系統(tǒng)中還有許多服務(wù)例程,它們同樣運(yùn)行在內(nèi)核模式中,為應(yīng)用程序請(qǐng)求提供服務(wù),并以某種方式與設(shè)備交互。它們首先檢查傳遞給它們的參數(shù)以保護(hù)系的數(shù)據(jù)結(jié)構(gòu),并把這個(gè)數(shù)據(jù)結(jié)構(gòu)送到某個(gè)驅(qū)動(dòng)程序的入口點(diǎn)。在剛才的調(diào)用中將會(huì)創(chuàng)建一個(gè)含有主功能代碼的璞蓋絳蚨愿肐的處理都與應(yīng)用程序無(wú)圖像輸出卡。驅(qū)
40、動(dòng)程序完成一個(gè)疧操作后,通過(guò)調(diào)用一個(gè)特殊的內(nèi)核模式服務(wù)例程來(lái)完成該瓿剎僮魘譴鞩的最后動(dòng)作,它使等待的應(yīng)用程序恢復(fù)運(yùn)行。上面所提到的應(yīng)用程序調(diào)用的璞蓋絳潁約岸緣撞鉖板卡的操作都是需要驅(qū)動(dòng)程序來(lái)完成的。也就是說(shuō),系統(tǒng)的驅(qū)動(dòng)程序整體的設(shè)計(jì)包括了給一并提交給上層應(yīng)用開(kāi)發(fā)人員的。的。所謂的控制字,是指我們與底層硬件開(kāi)發(fā)人員布蹇嘸7嗽提前規(guī)定好的簡(jiǎn)單的協(xié)議。例如,在板卡渲每占恢瞇慈表示板卡復(fù)位等。在開(kāi)發(fā)過(guò)程中,我們需要很多的控制字,以便讓用戶(hù)能夠從上層應(yīng)用程序來(lái)控制底層板卡的行為。這種控制字實(shí)際上本身也是數(shù)據(jù),但是在實(shí)現(xiàn)的時(shí)候并不是與一幀圖像數(shù)據(jù)的地址相同,因此在設(shè)計(jì)與上層應(yīng)用程序接口的時(shí)候也要將這兩種傳
41、輸數(shù)據(jù)的方式分開(kāi)。圖描述了數(shù)據(jù)傳輸與控制字傳輸?shù)倪^(guò)程。我們可以看到,上層應(yīng)用程序?qū)K了控制字傳輸子模塊來(lái)說(shuō),疧請(qǐng)求包是不同的類(lèi)型,它們對(duì)疧請(qǐng)求包的處理也不一樣。這兩個(gè)子模塊最終是要調(diào)用后端的處理部分,在這部分看來(lái),兩種疧終的目的都是讀寫(xiě)數(shù)據(jù)。 驅(qū)動(dòng)程序部分撞擊喟水;壽冒蕊勝。請(qǐng)求圖數(shù)據(jù)傳輸和控制字傳輸過(guò)程上層應(yīng)用程序接口部分主要是設(shè)計(jì)數(shù)據(jù)傳輸和控制字傳輸這兩個(gè)模塊。實(shí)際上,這兩個(gè)模塊的設(shè)計(jì)本身并不復(fù)雜,但是特別需要強(qiáng)調(diào)的是擴(kuò)展性。尤其是控制字傳輸模塊,也許在不久之后,我們對(duì)系統(tǒng)又提出了新的要求,不免要改動(dòng)一些上層的模型、添加一些新的控制,這時(shí)候如何盡量小的改動(dòng)驅(qū)動(dòng)程序或者不改動(dòng)驅(qū)動(dòng)程序就可以完
42、成這些新功能的添加就成為現(xiàn)在設(shè)計(jì)驅(qū)動(dòng)所要思考的問(wèn)題了。在本系統(tǒng)中,我們是這樣設(shè)計(jì)擴(kuò)展性的。定義好與底層邏輯部分的通信的結(jié)構(gòu)。 第四章系統(tǒng)驅(qū)動(dòng)的程序設(shè)計(jì)與實(shí)現(xiàn)它們使用常規(guī)的內(nèi)存引用來(lái)尋址這些寄存器。內(nèi)存映射設(shè)備暴露了軟件可以使用互轉(zhuǎn)換。每個(gè)映射寄存器保存著一個(gè)物理頁(yè)幀的地址。硬件使用一個(gè)地址來(lái)讀寫(xiě)內(nèi)存。對(duì)軟件來(lái)說(shuō)映射寄存器扮演了與頁(yè)表項(xiàng)相同的角色。中斷資源是完成一次類(lèi)型,以完成一次傳輸。圖底層硬件通信模塊的工作方式那么,如何利用這些資源來(lái)完成對(duì)布姆夢(mèng)屎筒僮髂圖描述了系統(tǒng)底層硬件通信模塊工作的方式。可以看出,數(shù)據(jù)從上層應(yīng)用程序接口模塊傳入到總線(xiàn)地址空間內(nèi),從總線(xiàn)地址空間來(lái)訪(fǎng)問(wèn)硬件。在我們可以將硬件
43、內(nèi)的存儲(chǔ)空間看作是一個(gè)個(gè)的寄存器,這樣訪(fǎng)問(wèn)的時(shí)候就好像在訪(fǎng)問(wèn)計(jì)算機(jī)的寄存器一樣了。系統(tǒng)驅(qū)動(dòng)程序的實(shí)現(xiàn)前文已經(jīng)將驅(qū)動(dòng)程序的結(jié)構(gòu)分析完畢了,也已經(jīng)將驅(qū)動(dòng)程序劃分了模塊。按照前面的分析,我們很容易就可以將驅(qū)動(dòng)程序的各個(gè)部分實(shí)現(xiàn)。本節(jié)重點(diǎn)介紹驅(qū)動(dòng)程序具體的實(shí)現(xiàn)過(guò)程。 指針,指向一個(gè)飧齪允粲誄跏薊糠鄭琖給出了該函;函數(shù)是需要我們來(lái)實(shí)現(xiàn)的,在這個(gè)函數(shù)中,我們需要完成以下工作:調(diào)用創(chuàng)建設(shè)備對(duì)象,并建立一個(gè)私有的設(shè)備擴(kuò)展對(duì)象。初始化設(shè)備擴(kuò)展和設(shè)備對(duì)象的成員。功能設(shè)備對(duì)象下層驅(qū)動(dòng)對(duì)象指針?lè)?hào)鏈接名 刪除對(duì)象所用的同步鎖;斷; 第四章系統(tǒng)驅(qū)動(dòng)的程序設(shè)計(jì)與實(shí)現(xiàn);襊求都是以疧包虺的形式來(lái)表現(xiàn)的,這里的械憷嗨樸赪上層應(yīng)
44、程。并不是每種季廡街瑁捎諫璞咐嘈禿虸種類(lèi)的不同某些步驟這幾個(gè)步驟的處理??梢哉f(shuō)以上驅(qū)動(dòng)程序就是圍繞幢嘈吹模鞩也就成為了驅(qū)動(dòng)程它將以硬件中斷形式發(fā)出通知,我們會(huì)在中斷處理函數(shù)中做一些最簡(jiǎn)單最重要的處理,然后將剩下的工作交給掏瓿傘瞥俟痰饔機(jī)制一個(gè)通用機(jī)制,通常都用在中斷處理中,是為了使操作系統(tǒng)能夠及時(shí)的相應(yīng)其他程序或者中斷。本系統(tǒng)中大量的繞涫腔贒傳輸?shù)碾H竊贒例程中完成的。上層應(yīng)用程序接口的實(shí)現(xiàn)系統(tǒng)驅(qū)動(dòng)程序的框架是整個(gè)驅(qū)動(dòng)程序的靈魂,在這個(gè)框架下我們需要進(jìn)一步實(shí)現(xiàn)驅(qū)動(dòng)程序與上層應(yīng)用程序的通信。前面的章節(jié)已經(jīng)分析過(guò),我們將上層應(yīng)用程序的接口分為了兩個(gè)子模塊:數(shù)據(jù)傳輸模塊和控制字傳輸模塊。我們是通過(guò)不同
45、的派遣函數(shù)來(lái)具體實(shí)現(xiàn)這兩個(gè)子模塊的。 ·方式:疧管理器鎖定了包含用戶(hù)模式緩沖區(qū)的物理內(nèi)存頁(yè),并創(chuàng)底層中斷處理在控制字傳輸模塊中,我們首先實(shí)現(xiàn)了函數(shù)。這個(gè)函數(shù)主要處理飧鲇沒(méi)腁需要提供一個(gè)輸入緩沖區(qū)和輸出緩沖區(qū),在內(nèi) 第四章系統(tǒng)驅(qū)動(dòng)的程序設(shè)計(jì)與實(shí)現(xiàn)腎。在控制字傳輸模塊中,牧硪桓鱟饔鎂褪譴寫(xiě)鞩。在我們的系統(tǒng)中,處理一個(gè)上層應(yīng)用的請(qǐng)求會(huì)用一定的時(shí)間,而這個(gè)時(shí)間是取決于蹇摹敲慈綣鼻暗腎峁怪蟹峙湟桓鯥的域,記錄當(dāng)前處理的閉飧鯥沒(méi)有被完成的時(shí)候,新的岜環(huán)胖玫絀前文中提到,我們是利用中斷來(lái)完成最后的傳輸?shù)?。這里的中斷是一個(gè)外部中斷,是由蹇嘸囊桓鮒芷諦緣?mèng)[卸希蒔總線(xiàn),最終通知到驅(qū)動(dòng)程序。當(dāng)驅(qū)動(dòng)程序收到這個(gè)中斷之后,驅(qū)動(dòng)程序會(huì)配置蒁完成傳輸工而不是在簡(jiǎn)單的傳輸數(shù)據(jù)。位局部總線(xiàn),可同時(shí)支持多組外圍設(shè)備。輸功能。遵循婀娣叮苫竦米罡嚦紗雜的涌謨蒙杓票淶孟嘍約虻殼凹撼晌V髁韉腜接口器件之一。 位偏移產(chǎn)生芟逽中斷郵槽中斷使能本地中斷使能本地中斷使能程序中列矗部梢源穎鏡囟即蹇讀寫(xiě),偏移地址分別是和 第四章系統(tǒng)驅(qū)動(dòng)的程序設(shè)計(jì)與實(shí)現(xiàn)主要負(fù)責(zé)控制的行為,也可以用來(lái)檢查是否傳輸完成。表命令狀態(tài);篈,位偏移動(dòng)。圖描述了底層通信模塊的狀態(tài)轉(zhuǎn)移
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院招聘護(hù)士合同范例
- 公共器材租賃合同范本
- 合同范本 合作
- 公司勞動(dòng)用工合同范本簡(jiǎn)版
- 售后回租合同范本
- 出租野餐工具合同范本
- 合同范本些可以修改
- 化妝造型合同范本
- 華能電廠(chǎng)合同范本
- 員工內(nèi)部合同范本
- 安全生產(chǎn)法律法規(guī)匯編(2025版)
- 義務(wù)教育化學(xué)課程標(biāo)準(zhǔn)(2022年版)解讀
- 生產(chǎn)加工型小微企業(yè)安全管理考試(含答案)
- 2《幼苗長(zhǎng)大了》課件
- 第三章-農(nóng)村公共管理組織課件
- 注塑員工培訓(xùn)
- 《麻精藥品培訓(xùn)》ppt課件
- JMP操作簡(jiǎn)要培訓(xùn)
- 勝利油田壓驅(qū)技術(shù)工藝研究進(jìn)展及下步工作方向
- 研究生復(fù)試匯報(bào)ppt
- 畢節(jié)市疾病預(yù)防控制中心衛(wèi)生應(yīng)急管理工作規(guī)范
評(píng)論
0/150
提交評(píng)論