




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