版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
構(gòu)建單片機(jī)虛擬實(shí)驗(yàn)仿真平臺(tái)
摘要介紹了構(gòu)建單片機(jī)虛擬實(shí)驗(yàn)仿真平臺(tái)的基本思路和各功能的實(shí)現(xiàn)方法,詳細(xì)敘述了構(gòu)建仿真平臺(tái)所使用的一些技術(shù)手段。關(guān)鍵詞虛擬實(shí)驗(yàn)平臺(tái);中斷;輸入輸出接口;示波器;仿真實(shí)驗(yàn)
1引言虛擬仿真實(shí)驗(yàn)是利用計(jì)算機(jī)創(chuàng)建出一個(gè)可視化的實(shí)驗(yàn)操作環(huán)境,其中的每一個(gè)可視化仿真物體代表一種實(shí)驗(yàn)儀器或者設(shè)備,通過(guò)操作這些虛擬的實(shí)驗(yàn)儀器或設(shè)備,即可進(jìn)行各種復(fù)雜的實(shí)驗(yàn),達(dá)到與真實(shí)實(shí)驗(yàn)環(huán)境相一致的教學(xué)要求和目的。與傳統(tǒng)的硬件實(shí)驗(yàn)平臺(tái)相比,虛擬實(shí)驗(yàn)平臺(tái)可以不受時(shí)空的限制,用戶能隨時(shí)隨地進(jìn)行實(shí)驗(yàn)。通過(guò)采用虛擬化技術(shù),利用軟件仿真,可以完全不使用真實(shí)的實(shí)驗(yàn)儀器,因此不會(huì)存在儀器磨損、破壞等情況,既節(jié)省了資金,又有利于資源共享。對(duì)于有危險(xiǎn)性的實(shí)驗(yàn),虛擬實(shí)驗(yàn)平臺(tái)更具有優(yōu)勢(shì)。
2單片機(jī)虛擬實(shí)驗(yàn)仿真平臺(tái)的實(shí)現(xiàn)
系統(tǒng)設(shè)計(jì)思想及總體設(shè)計(jì)我們開(kāi)發(fā)的“單片機(jī)虛擬實(shí)驗(yàn)平臺(tái)”將“硬件實(shí)驗(yàn)臺(tái)”和“軟件調(diào)試環(huán)境”均統(tǒng)一進(jìn)行虛擬化設(shè)計(jì),亦即不僅“硬件實(shí)驗(yàn)臺(tái)”設(shè)計(jì)為軟件形式,原來(lái)的匯編程序等調(diào)試工具也要重新專門進(jìn)行設(shè)計(jì),MASM等工具就不能使用。并且由于采用封閉式設(shè)計(jì)思路,對(duì)應(yīng)用環(huán)境的適應(yīng)性及其可靠性、穩(wěn)定性相對(duì)較強(qiáng);也就是說(shuō),這種虛擬平臺(tái)下的實(shí)驗(yàn)結(jié)果與硬件條件下的結(jié)果更為相似。圖1傳統(tǒng)單片機(jī)實(shí)驗(yàn)系統(tǒng)組成結(jié)構(gòu)該仿真平臺(tái)可以由如圖2所示的模塊圖來(lái)表示。從圖2可以看出8031和存儲(chǔ)器構(gòu)成了虛擬的CPU,直接或間接地控制其它所有模塊,并負(fù)責(zé)執(zhí)行匯編語(yǔ)句。通信橋模塊實(shí)際上是一個(gè)虛擬的存儲(chǔ)空間,是接口芯片和外設(shè)(LED、開(kāi)關(guān)和顯示器等)間數(shù)據(jù)交換的場(chǎng)所。接口芯片和外設(shè)之間不直接發(fā)生關(guān)系,它們通過(guò)通信橋模塊提供的接口將數(shù)據(jù)放入通信橋緩存或從通信橋緩存中取出數(shù)據(jù)。通常,通信橋分為輸入橋、輸出橋、芯片橋三種情況。開(kāi)關(guān)與芯片連接構(gòu)成輸入橋,LED或者顯示器與芯片連接構(gòu)成輸出橋,芯片與芯片連接構(gòu)成芯片橋。圖2總體框架圖
具體設(shè)計(jì)仿真平臺(tái)編譯原理仿真平臺(tái)對(duì)于匯編語(yǔ)言的編譯模擬了真實(shí)的CPU。大家都知道,真實(shí)的CPU在編譯過(guò)程中要使用寄存器(包括通用寄存器、特殊功能寄存器)。在虛擬的CPU環(huán)境下,我們模擬了一些寄存器,并且定義了一些執(zhí)行函數(shù)以及運(yùn)行規(guī)則。當(dāng)然,這些運(yùn)行規(guī)則是根據(jù)匯編指令制定的。虛擬的編譯過(guò)程則是逐一與運(yùn)行規(guī)則進(jìn)行比較,從而檢查語(yǔ)法錯(cuò)誤,同時(shí)生成數(shù)據(jù)庫(kù)存儲(chǔ)所得到的一些數(shù)據(jù)。我們可以更具體地表述一下虛擬編譯系統(tǒng)的工作過(guò)程:CPU在執(zhí)行匯編程序的時(shí)候,實(shí)際上是運(yùn)行的執(zhí)行函數(shù)。首先啟動(dòng)一個(gè)新的線程mainthread,然后把源程序取出來(lái)逐行逐行地執(zhí)行,這個(gè)動(dòng)作是由Qrun函數(shù)執(zhí)行的。Qrun函數(shù)從源程序的第一行開(kāi)始執(zhí)行,把取得的這一行數(shù)據(jù)先進(jìn)行預(yù)處理,去掉注釋(以“;”開(kāi)始的說(shuō)明)和標(biāo)號(hào)(位于行首并以“;”開(kāi)始的程序),然后再按照匯編語(yǔ)言的固定格式取得指令名稱和操作數(shù),每一個(gè)指令名稱都有一個(gè)與之相對(duì)應(yīng)的執(zhí)行函數(shù),這些函數(shù)負(fù)責(zé)完成對(duì)應(yīng)指令的功能,例如:MOV函數(shù)和MOV指令是對(duì)應(yīng)的,此函數(shù)負(fù)責(zé)把第二個(gè)參數(shù)的值放到第一個(gè)參數(shù)里面。程序就像這樣一行一行執(zhí)行下去。值得我們注意的還有指針的實(shí)現(xiàn)以及中斷的實(shí)現(xiàn)問(wèn)題。在虛擬的編譯系統(tǒng)中,指針和真實(shí)的指針不同。我們用行號(hào)代替了內(nèi)存地址。普通情況下,程序每執(zhí)行一行,指針就加一(不論單指令語(yǔ)句、雙指令語(yǔ)句還是多指令語(yǔ)句均同樣處理),跳到下一行繼續(xù)執(zhí)行。但若遇到跳轉(zhuǎn)指令或類跳轉(zhuǎn)指令的時(shí)候就不一樣了。首先要根據(jù)跳轉(zhuǎn)的目的標(biāo)號(hào)到在編譯階段建立的數(shù)據(jù)庫(kù)中查找相應(yīng)的行號(hào),然后將獲得的行號(hào)賦值給指針I(yè)P,那么此時(shí)程序就跳到對(duì)應(yīng)的行繼續(xù)執(zhí)行。對(duì)于中斷的處理,我們借助了虛擬的8259A。具體實(shí)現(xiàn)過(guò)程將在中斷實(shí)現(xiàn)模塊中詳細(xì)介紹。虛擬實(shí)驗(yàn)操作臺(tái)虛擬實(shí)驗(yàn)操作臺(tái)是硬件設(shè)備的一個(gè)縮影。它包含了8031的四個(gè)并行I/O端口即P0口、P1口、P2口、P3口;以及中斷控制器8259A的IR0~IR7八條中斷請(qǐng)求輸入線;還有8255的三個(gè)8位I/O數(shù)據(jù)口PA口、PB口、PC口;最后還有LED、顯示器、開(kāi)關(guān)三種外部設(shè)備(示波器是以單獨(dú)的界面形式存在的,其設(shè)計(jì)方法將單獨(dú)介紹)。它可以劃分為三個(gè)部分:顯示部分、外設(shè)部分(LED、開(kāi)關(guān))、接線部分(一個(gè)接口實(shí)現(xiàn),用于將外設(shè)和實(shí)驗(yàn)中用到的芯片連接起來(lái)即建立通信)。對(duì)于顯示部分,我們模擬了八段顯示器。并且在程序中我們給它分配了一個(gè)中斷號(hào)10H,功能號(hào)0(AH=0)表示對(duì)顯示屏的操作(例如,AL=1表示清屏)。功能號(hào)1(AH=1)表示將AL中的數(shù)據(jù)寫入顯示器。它的實(shí)現(xiàn)可以利用一個(gè)RichTextBox來(lái)模擬,給顯示部分劃分一個(gè)線程,讓該線程一直處于不停的檢測(cè)狀態(tài)isMonitorInterrupt,若為真表示顯示器有中斷,然后馬上去尋找功能號(hào)并實(shí)現(xiàn)相應(yīng)的功能。在執(zhí)行函數(shù)INT中,有一個(gè)對(duì)應(yīng)于顯示器的分支,當(dāng)參數(shù)為10H(也就是內(nèi)中斷號(hào)為10H)時(shí)就將狀態(tài)isMonitorInterrupt置為真,從而,只要在程序中一有顯示器中斷則馬上就可以在模擬的顯示器中體現(xiàn)出來(lái)。對(duì)于外設(shè)部分,我們模擬了LED和開(kāi)關(guān)。LED我們用Label來(lái)實(shí)現(xiàn),通過(guò)backcolor的變換來(lái)實(shí)現(xiàn)LED的亮與滅。開(kāi)關(guān)我們用TrackBar來(lái)實(shí)現(xiàn),通過(guò)變形可以得到一個(gè)很形象的開(kāi)關(guān),將滑塊滑到最上面表示開(kāi),滑到最下面表示關(guān)。在LED相關(guān)的程序中,我們還定義了一個(gè)線程RunLED,該線程將一直處于運(yùn)行狀態(tài),不停地將緩沖中的數(shù)據(jù)取出,并按位對(duì)LED進(jìn)行操作。開(kāi)關(guān)的程序?qū)崿F(xiàn)更簡(jiǎn)單,當(dāng)我們改變開(kāi)關(guān)的一個(gè)狀態(tài)之后,馬上將SwitchStatus傳遞給接線部分對(duì)應(yīng)的程序模塊。實(shí)際上,開(kāi)關(guān)只負(fù)責(zé)狀態(tài)的改變。對(duì)于接線部分,實(shí)際上是一個(gè)復(fù)雜的模塊。首先要解決表面上接線的問(wèn)題。在虛擬實(shí)驗(yàn)操作臺(tái)上,每一個(gè)需要接線的地方都設(shè)定了一個(gè)接線孔。實(shí)際上是用圖片模擬的,沒(méi)接線的時(shí)候是一種圖片,處于接線狀態(tài)的時(shí)候又是另一種圖片。同時(shí)引用了DrawLine函數(shù)來(lái)繪制導(dǎo)線。其次要考慮到它深層次上的意義。從另外一個(gè)角度來(lái)說(shuō),虛擬實(shí)驗(yàn)操作臺(tái)起到了“橋”的作用。它負(fù)責(zé)接收外設(shè)(開(kāi)關(guān))送過(guò)來(lái)的數(shù)據(jù),并根據(jù)建立的“輸入橋”將數(shù)據(jù)傳遞給相應(yīng)的芯片,還負(fù)責(zé)接收芯片傳過(guò)來(lái)的數(shù)據(jù)并根據(jù)建立的“輸出橋”將數(shù)據(jù)傳遞給外設(shè)(主要是LED)。而各種橋的建立也是不容忽視的。所有接線孔都對(duì)應(yīng)一個(gè)序號(hào),芯片對(duì)應(yīng)接線孔的序號(hào)固定在一個(gè)范圍內(nèi),外設(shè)對(duì)應(yīng)接線孔的序號(hào)對(duì)應(yīng)在一個(gè)范圍內(nèi)(開(kāi)關(guān)與LED也要區(qū)分開(kāi))。這樣做能夠很容易地通過(guò)序號(hào)獲得該接線孔的類型。當(dāng)連續(xù)點(diǎn)擊兩個(gè)接線孔時(shí),程序就會(huì)根據(jù)接線孔的序號(hào)得出接線孔的類型,若是輸入的接線孔和芯片孔,則加入輸入橋;若是輸出的接線孔和芯片孔,則加入輸出橋;若兩個(gè)都是芯片接線孔,則加入芯片橋。這樣就建立了橋。圖3虛擬實(shí)驗(yàn)操作臺(tái)(正在運(yùn)行中)中斷模塊(8259A)真正的8259A在編程的時(shí)候要將中斷服務(wù)子程序入口地址放入中斷向量表;在虛擬系統(tǒng)中,地址均由行號(hào)來(lái)代替,當(dāng)用匯編指令獲得一個(gè)子程序的地址時(shí),實(shí)際上是取得了它的行號(hào)。當(dāng)中斷到來(lái)的時(shí)候?qū)嶋H上執(zhí)行的也正是該行號(hào)對(duì)應(yīng)的程序,所以其功能與真實(shí)的是一樣的。為了能夠更真實(shí)地模擬硬件,我們定義了狀態(tài)機(jī)來(lái)負(fù)責(zé)管理8259A的工作。狀態(tài)機(jī)的功能是:識(shí)別寫入端口的是否是初始化數(shù)據(jù),并可以根據(jù)寫入的內(nèi)容來(lái)確定下一步應(yīng)該寫入的內(nèi)容,即從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的轉(zhuǎn)化;同時(shí)還記錄8259A的一些工作狀態(tài),比如:優(yōu)先級(jí)方式、中斷結(jié)束方式等等。對(duì)于中斷嵌套,我們使用堆棧進(jìn)行處理。首先定義一個(gè)堆棧stack(實(shí)際上是由一個(gè)數(shù)組構(gòu)成的存儲(chǔ)區(qū))負(fù)責(zé)在執(zhí)行中斷前將IP入棧,即行號(hào)入棧。每當(dāng)程序執(zhí)行到RETI指令的時(shí)候就從stack中取出一個(gè)行號(hào)放入IP(可稱為出棧)。這樣就保證了中斷程序結(jié)束后順利回到斷點(diǎn)處繼續(xù)執(zhí)行,這時(shí)的斷點(diǎn)可以在主程序中,也可以在某個(gè)中斷程序中(即中斷嵌套)。
I/O模塊(8255)8255有三個(gè)I/O數(shù)據(jù)口,即PA口、PB口、PC口。在虛擬實(shí)驗(yàn)操作臺(tái)上有相應(yīng)的A口、B口、C口的接線孔,共24個(gè)。模擬的8255由相應(yīng)的執(zhí)行函數(shù)和寄存器組成。由于各口工作方式的不同以及編程的方便問(wèn)題,除了模擬控制寄存器外,還單獨(dú)模擬了A、B、C三口的輸入、輸出狀態(tài),以及A、B口的工作狀態(tài)。8255的執(zhí)行函數(shù)只有在OUT、IN兩種指令中執(zhí)行。當(dāng)在執(zhí)行OUT指令或者IN指令時(shí)端口地址就屬于8255,就會(huì)去執(zhí)行8255模塊的執(zhí)行函數(shù)。8255的執(zhí)行函數(shù)只負(fù)責(zé)對(duì)其對(duì)應(yīng)的寄存器進(jìn)行操作,例如:當(dāng)執(zhí)行OUT指令的時(shí)候模塊的執(zhí)行函數(shù)就法則把AL中的值放到相應(yīng)的端口寄存器中,當(dāng)執(zhí)行IN指令時(shí)執(zhí)行函數(shù)就負(fù)責(zé)把對(duì)應(yīng)端口寄存器的值放到AL中。存儲(chǔ)器存儲(chǔ)器是用來(lái)存儲(chǔ)數(shù)據(jù)和程序代碼的,我們所創(chuàng)建的虛擬平臺(tái)同樣也需要存儲(chǔ)器來(lái)存儲(chǔ)一些數(shù)據(jù)和代碼。具體的實(shí)現(xiàn)方法是使用一個(gè)一維數(shù)組,模擬虛擬內(nèi)存。數(shù)組的下標(biāo)則代表內(nèi)存地址,也就是說(shuō)下標(biāo)與地址一一對(duì)應(yīng)。并且我們專門設(shè)計(jì)了一個(gè)窗口負(fù)責(zé)顯示和修改內(nèi)存。比如,在運(yùn)行一個(gè)程序的時(shí)候可以根據(jù)需要通過(guò)此窗口將數(shù)據(jù)預(yù)先輸入內(nèi)存,或者運(yùn)行程序的時(shí)候?qū)⒔Y(jié)果放入某個(gè)內(nèi)存單元中,程序運(yùn)行完畢后可以通過(guò)此窗口查看結(jié)果。示波器示波器是一種外部設(shè)備。任何數(shù)據(jù)在送入示波器之前都必須符合一個(gè)前提,就是要為模擬量。而在單片機(jī)實(shí)驗(yàn)中我們處理的數(shù)據(jù)對(duì)象均為數(shù)字量,所以要將數(shù)據(jù)進(jìn)行D/A轉(zhuǎn)換。所以我們?cè)诜抡嫦到y(tǒng)內(nèi)部模擬了0832(數(shù)模轉(zhuǎn)換芯片)。而在具體的實(shí)現(xiàn)過(guò)程中,我們?yōu)槭静ㄆ鹘⒘艘粋€(gè)線程(thread)runshiboqi,用threadstatus值(True和Flase)控制線程的運(yùn)行。=True時(shí),線程運(yùn)行,啟動(dòng)draw函數(shù)繪制圖形;反之則不運(yùn)行。而在執(zhí)行函數(shù)啟動(dòng)線程之前,首先是要對(duì)D/A轉(zhuǎn)換器中的數(shù)據(jù)進(jìn)行處理,因?yàn)樵趯懭雲(yún)R編程序之后,相應(yīng)的數(shù)據(jù)會(huì)分別存入對(duì)應(yīng)的寄存器中;所以D/A轉(zhuǎn)換器的數(shù)據(jù)處理在程序?qū)懭霑r(shí)已經(jīng)完成了。D/A轉(zhuǎn)換器實(shí)際上所完成的功能是對(duì)各存儲(chǔ)器中數(shù)據(jù)的調(diào)用以及相關(guān)數(shù)學(xué)函數(shù)的引用。圖4示波器(正在運(yùn)行中)
3構(gòu)建仿真平臺(tái)使用的一些技術(shù)該仿真平臺(tái)是構(gòu)建在工作平臺(tái)之上的。所以使用一些特殊技術(shù)能夠使得仿真平臺(tái)的運(yùn)行結(jié)果與硬件實(shí)驗(yàn)結(jié)果更為相似。
匯編程序的編譯對(duì)于匯編語(yǔ)言的執(zhí)行和接口芯片的工作,傳統(tǒng)的思想是借助于MASM之類的工具將匯編語(yǔ)言編譯成二進(jìn)制代碼,這些二進(jìn)制代碼在CPU的控制下去完成相應(yīng)的功能。對(duì)于一個(gè)模擬硬件的軟件來(lái)說(shuō),做這樣的事情太過(guò)于復(fù)雜。因此我們用函數(shù)來(lái)模擬匯編指令,即每一個(gè)匯編指令對(duì)應(yīng)一個(gè)函數(shù),我們叫它執(zhí)行函數(shù),如:MOV函數(shù)完成MOV指令的功能,實(shí)現(xiàn)PublicSubMOV(ByValREF1AsString,ByValREF2AsString)DimtempAsIntegertemp=ReadData(REF2)CallWriteData(REF1,temp)EndSubReadData函數(shù)為自定義的通用函數(shù),負(fù)責(zé)取出參數(shù)表示的值;WriteData函數(shù)也為通用函數(shù),負(fù)責(zé)將立即數(shù)temp寫入存儲(chǔ)區(qū)REF1。
DirectX技術(shù)DirectX是Microsoft公司提供的一個(gè)對(duì)硬件直接進(jìn)行操作的接口,早期的Windows不提供對(duì)硬件直接操作的功能,開(kāi)發(fā)了這個(gè)接口之后,可以對(duì)顯示器、鼠標(biāo)、鍵盤、聲卡、顯卡等硬件設(shè)備直接進(jìn)行操作。在仿真平臺(tái)啟動(dòng)的時(shí)候可以利用DirectX改變顯示器的分辨率,使可視化操作界面(虛擬實(shí)驗(yàn)操作臺(tái))的布局具有一致性。其簡(jiǎn)單實(shí)現(xiàn)PublicDirectXAsNewDirectX7PublicDDrawAsDirectDraw7DDraw=("")Call(800,600,32,0,CONST__DEFAULT)
通信橋通信橋包括輸入橋、輸出橋和芯片橋。通信橋決定了芯片和外設(shè)間的通信。輸入橋負(fù)責(zé)接收外設(shè)(主要是開(kāi)關(guān))送過(guò)來(lái)的數(shù)據(jù),并將數(shù)據(jù)傳遞給對(duì)應(yīng)的芯片;輸出橋負(fù)責(zé)接收芯片送過(guò)來(lái)的數(shù)據(jù),并將數(shù)據(jù)傳遞給對(duì)應(yīng)的外設(shè)(主要是LED);芯片橋負(fù)責(zé)在芯片間傳遞數(shù)據(jù)?,F(xiàn)給出通信橋的基本數(shù)據(jù)結(jié)構(gòu):PublicStructureBridgeDataPublicchipvalueAsInteger‘芯片接線孔的序號(hào)PublicdevicevalueAsInteger‘外設(shè)接線孔的序號(hào)PublicpchipAsInteger‘芯片接線孔的位置,便于連線PublicpdeviceAsInteger‘外設(shè)接線孔的位置當(dāng)在接線板上接線的時(shí)候,點(diǎn)擊某個(gè)接線孔后,根據(jù)孔的編號(hào)確定它的類型(芯片、輸出外設(shè)、輸入外設(shè)),然后根據(jù)兩個(gè)接線孔的類型加入不同的通信橋。例如,若是芯片和輸入設(shè)備,則加入輸入橋。
多線程以及線程同步技術(shù)由于每一個(gè)芯片對(duì)應(yīng)一個(gè)線程,就有可能出現(xiàn)多個(gè)線程同時(shí)對(duì)一個(gè)數(shù)據(jù)處理的情況,例如:通信橋模塊和8255模塊之間就有可能出現(xiàn)這樣的情況,8255模塊通過(guò)通信橋模塊提供的接口數(shù)據(jù)的同時(shí),通信橋模塊把從外設(shè)接收到的數(shù)據(jù)寫入該接口。可以通過(guò)設(shè)置一個(gè)互斥變量來(lái)保證線程對(duì)臨界資源的互斥訪問(wèn),或者通過(guò)提供的SyncLock語(yǔ)句來(lái)實(shí)現(xiàn)同步鎖。
緩沖技術(shù)由于每個(gè)線程(同優(yōu)先級(jí))運(yùn)行的時(shí)間和次序具有不可預(yù)測(cè)性,所以在仿真時(shí)可能會(huì)出現(xiàn)這樣額問(wèn)題:線程1傳送數(shù)據(jù)給線程2,線程1一共發(fā)出了3個(gè)數(shù)據(jù),而線程2只收到了1個(gè)。可以用緩沖的思想來(lái)解決這個(gè)問(wèn)題。首先建立一個(gè)隊(duì)列,當(dāng)線程1發(fā)送數(shù)據(jù)的時(shí)候不直接發(fā)給線程2,而是進(jìn)隊(duì)列,線程2取數(shù)據(jù)的時(shí)候直接到隊(duì)列中去取。這樣就保證了數(shù)據(jù)的完整性,從而屏蔽了線程之間差異性。實(shí)現(xiàn)過(guò)程PublicClassCommClassPublicShareddata()As
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度VIP會(huì)員高端健身與美容服務(wù)協(xié)議3篇
- 二零二四天津住宅裝修工程安全文明施工合同3篇
- 2024版牛肉進(jìn)口商業(yè)交易協(xié)議細(xì)則版
- 2024老舊倉(cāng)庫(kù)創(chuàng)意產(chǎn)業(yè)園區(qū)開(kāi)發(fā)協(xié)議
- 2025年度承兌匯票擔(dān)保與銀行間市場(chǎng)利率衍生品合同3篇
- 二零二五版9A文條款離婚協(xié)議律師代理服務(wù)合同3篇
- 基于2025年度需求的全息標(biāo)識(shí)牌制作與安裝合同3篇
- 二零二五年高端葡萄酒進(jìn)口與代理合同2篇
- 2025年度林木種質(zhì)資源保護(hù)與利用合同范本4篇
- 2025年度綠色建筑節(jié)能改造分包合同低碳環(huán)保2篇
- 國(guó)家自然科學(xué)基金項(xiàng)目申請(qǐng)書
- 電力電纜故障分析報(bào)告
- 中國(guó)電信網(wǎng)絡(luò)資源管理系統(tǒng)介紹
- 2024年浙江首考高考選考技術(shù)試卷試題真題(答案詳解)
- 《品牌形象設(shè)計(jì)》課件
- 倉(cāng)庫(kù)管理基礎(chǔ)知識(shí)培訓(xùn)課件1
- 藥品的收貨與驗(yàn)收培訓(xùn)課件
- GH-T 1388-2022 脫水大蒜標(biāo)準(zhǔn)規(guī)范
- 高中英語(yǔ)人教版必修第一二冊(cè)語(yǔ)境記單詞清單
- 政府機(jī)關(guān)保潔服務(wù)投標(biāo)方案(技術(shù)方案)
- HIV感染者合并慢性腎病的治療指南
評(píng)論
0/150
提交評(píng)論