簡單例子學(xué)習(xí)DSP編程和CCS使用_第1頁
簡單例子學(xué)習(xí)DSP編程和CCS使用_第2頁
簡單例子學(xué)習(xí)DSP編程和CCS使用_第3頁
簡單例子學(xué)習(xí)DSP編程和CCS使用_第4頁
簡單例子學(xué)習(xí)DSP編程和CCS使用_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、目 錄實驗一 CCS基本使用和DSP匯編編程基礎(chǔ)一、 預(yù)習(xí)內(nèi)容復(fù)習(xí)匯編語言指令內(nèi)容,匯編語言使用中的基本概念,CCS的基本概念。二、實驗?zāi)康?. 掌握一個DSP軟件開發(fā)流程。2. 理解DSP的啟動過程。3. 掌握匯編的書寫規(guī)范,學(xué)會匯編指令的運用。4. 掌握編譯器和連接器的使用,能夠合理地分配存儲空間。5. 學(xué)習(xí)CCS的各種調(diào)試技巧,如:CUP寄存器、數(shù)據(jù)和程序存儲器的觀察,斷點的設(shè)置,反匯編窗口的使用。6. 學(xué)習(xí)定點數(shù)的運算方法。三、實驗要求1. 用.set定義四個立即數(shù)。2. 在.bss段建立幾個存儲空間。3. 把立即數(shù)相加和相乘,結(jié)果放在.bss分配的存儲空間。4. 合理分配各個段的存儲

2、地址,并使用CCS觀察。四、實驗原理1. 軟件開發(fā)流程 從大的步驟來講,一個軟件要能夠在DSP上面正常運行,需要用戶完成以圖1-1所示的流程。 第一步:在用戶的工程里面,必須包含至少兩個文件。一個是程序指令的源文件,這個文件可以是匯編編寫的,也可以是C語言編寫的。當(dāng)然,這樣的文件在一個工程當(dāng)中可以用多個,而且,編程的語言可以不統(tǒng)一。工程當(dāng)中必須包含的第二個文件是連接文件。這個文件的作用是把源文件中定義的各個段放到用戶指定的DSP的程序存儲區(qū),從而可以在該區(qū)域按一定順序執(zhí)行。 第二步:兩個文件編輯完成以后,可以調(diào)用編譯、匯編和連接命令。編譯功能把C源文件轉(zhuǎn)化為匯編文件,期間的轉(zhuǎn)化有一定的規(guī)則,這

3、些規(guī)則是在書寫C語言語句是應(yīng)該注意的東西。匯編的功能是把編譯形成的匯編文件或者是用戶自己編輯的匯編文件轉(zhuǎn)化為COFF格式文件。而最后通過連接命令,結(jié)合連接文件,把COFF文件連接成為可執(zhí)行的COFF文件,即后綴名為.OUT的文件。第三步:通過CCS的加載功能,把.OUT文件加載到DSP內(nèi)部,其地址由連接文件規(guī)定。如果成功,可以在CCS中運行該文件,并相應(yīng)進行調(diào)試。圖1-1 開發(fā)流程圖2.匯編源文件書寫在CCS中,新建一個文件,在這個文件中,如果使用匯編語言,那就命名時使用ASM的后綴名,如果使用C語言,那命名時就使用C的后綴名。同時應(yīng)該把文件加載到相應(yīng)的工程當(dāng)中去。對于使用匯編的源文件,他有一

4、定的語法規(guī)范。包括語法格式,標號的表示,立即數(shù)的表示,段的定義和宏定義。TMS320C54x Assembly Language Tools Users Guide和TMS320C54x DSP Reference Set-Volume 2: Mnemonic Instruction Set是掌握匯編語言書寫方法的兩本手冊。 3.啟動方式DSP有多種啟動方式。但是,由于我們采用通過CCS從JTAG直接加載的方式,對于其他的加載過程可以不必考慮。但是,MP/MC方式,對于啟動卻有一定影響。這里,有兩個問題要注意。一是系統(tǒng)復(fù)位后,MP/MC寄存器的值究竟是多少。二是MP、MC方式(DSP是由MP/

5、MC引腳來決定是訪問內(nèi)部程序存儲器還是外部程序存儲器,MP/MC=1訪問外部程序存儲器空間,MP/MC=0訪問內(nèi)部程序存儲器空間)對應(yīng)的DSP片內(nèi)存儲器分配關(guān)系如何。通過硬件跳線,可以設(shè)置啟動方式,通過連接文件,可以把程序代碼放到指定的位置。4CCS的調(diào)試工具在本次實驗中,CCS的調(diào)試工具將要使用到一些基本的操作。主要包括如何觀察CPU的各個寄存器,如何觀察數(shù)據(jù)區(qū)和程序區(qū)的數(shù)據(jù);單步執(zhí)行的方法和斷點執(zhí)行。五、實驗步驟1. 雙擊桌面的CCS5000圖標,進入CCS。如果遇到問題,檢查硬件線路是否連接正確,電源是否打開,CCS SETUP是否合理。當(dāng)然,也有可能是PC機內(nèi)的ISA插卡接觸不好。2.

6、 新建一個工程。執(zhí)行Project菜單下的New,選擇一個合適的位置,存放這個新建的工程,最好是自己建立的目錄,便于管理。工程的名稱以字母開頭,其他沒有要求,不需要加后綴名,如:sy1。3. 新建一個文件作為匯編源文件。執(zhí)行File菜單下的New/Sourse File命令,接著就可以在編輯框里,按照匯編語言的規(guī)范,編輯相應(yīng)的指令代碼。指令完成以后,執(zhí)行File/Save as命令,給匯編文件取一個合適的文件名,保存在同工程相同的目錄下。保存時,不需要加后綴名,但是,要選擇文件的類型為Assembly Source File(.asm)。4. 編輯匯編源文件,完成以后,需要把這個文件加入到相應(yīng)

7、的工程中去。在左邊的工程管理窗口里,鼠標移到工程文件名上面,單擊右鍵,選擇Add File。尋找到剛才編輯的匯編源文件,選擇確認。之后可以在工程管理器中觀察到,Source文件夾中,出現(xiàn)了剛才的匯編文件。5. 匯編文件的代碼如下:.global _c_int00 VAL1 .set 012h ; 18VAL2 .set 034h ; 52 .bss temp,1 ; address of 0x080 .bss temp1,1 ; address of 0x081 .bss temp2,1 ; address of 0x082;result register .bss add_result,1

8、; address of 0x088 .bss mpy_i_h,1 ; address of 0x08a .bss mpy_i_l,1 ; address of 0x08b .text _c_int00: ld #temp,DP ; load DP of temp1 st #VAL1,temp1 st #VAL2,temp2 ; init temp1 & temp2 ,18+52=70(0x46);- test ADD - ld temp1,a ; load temp1 - a add temp2,a ; a+temp2 - a stl a,add_result ; save a(low 16

9、 bits) - add_result nop ; set breakpoint st #VAL1,temp1 st #VAL2,temp2 ; init temp1 & temp2,18*52=936(0x3a8);- test MPY (integer) - rsbx FRCT ; prepare for integer mpy ld temp1,T ; temp1 - T mpy temp2,a ; temp1*temp2 - A (result is 32 bit) sth a,mpy_i_h ; the high 16bit in mpy_i_h stl a,mpy_i_l ; th

10、e low 16bit in mpy_i_l nop ; set breakpointend: b end .end使用.set定義立即數(shù)的值;使用.bss分配一定存儲空間;在.text段編寫指令,主要有:ld、st、add、mpy、stl、sth等等。6. 根據(jù)MP/MC的值,理解DSP存儲器地址分配,編輯好連接文件。連接文件的編輯方法同匯編源文件是一樣的,也是建立、編輯、存盤、命名、添加入工程。不同在于文件的內(nèi)容和文件的后綴名不同。連接文件的后綴名文.cmd,選擇存盤類型的時候要注意。文件的內(nèi)容如下: MEMORY PAGE 0: IPROG: origin = 0x2000, len =

11、 0x1000 PAGE 1: IDATA: origin = 0x80, len = 0x1000 SECTIONS .text: IPROG PAGE 0 .bss: IDATA PAGE 1 7. 連接文件本來可以設(shè)置許多的參數(shù),但是,這些參數(shù)也可以在Project/Options中設(shè)置。在這個窗口中,可以對編譯、匯編和連接的過程設(shè)置參數(shù),各個參數(shù)的意思查閱相關(guān)的手冊。通常,使用默認參數(shù)就可以了。參數(shù)設(shè)置完成后,就可以執(zhí)行Debug/build命令。這個命令將依次執(zhí)行編譯、匯編、連接的三個過程,任何一個過程中出現(xiàn)錯誤,都會在熒幕下方的窗口中顯示出來。對于錯誤,要認真閱讀提示信息,從而知道

12、錯誤出現(xiàn)的位置,并進行相應(yīng)的改正。8. 如果Build的過程沒有錯,將會在工程所在目下出現(xiàn)一個后綴名為.out的文件,這個文件文件名是在Project/Options中設(shè)置產(chǎn)生的。目標板采用MC方式,load剛生成的.out文件,如果提示錯誤,檢查跳線設(shè)置。9. 加載成功,光標出現(xiàn)在程序起始位置,呈黃色。這時,在需要設(shè)置斷點的地方設(shè)置斷點。打開View里面的CPU Register,在新出現(xiàn)的窗口里,可以觀察DSP CPU寄存器的各個數(shù)據(jù)。同樣,可以打開View/Memery,選擇.data代碼段所在的位置,開始地址為0X80,位于data頁,在新窗口中,可以觀察該地址開始的數(shù)據(jù)存儲區(qū)的各個數(shù)

13、據(jù)。10. 執(zhí)行Debug/Run命令,程序開始運行。到斷點處停止,加法的運算完成。這時,可以再次觀察CPU Register窗口,紅色數(shù)字代表數(shù)據(jù)有變換,注意PC指針的改變。數(shù)據(jù)窗口中,則注意用于存放運算結(jié)果的地址單元的值的變化。11. 繼續(xù)執(zhí)行Run命令,觀察乘法的運算結(jié)果。12. 執(zhí)行Debug中Reset Dsp和Restart命令,光標從新回到程序入口。執(zhí)行Debug/StepInto,單步運行程序,再次觀察結(jié)果。六、實驗報告要求 給出數(shù)據(jù)空間的定義數(shù)據(jù)大小和存儲位置,記錄各個計算結(jié)果變化前后的內(nèi)容,給出連接文件和匯編程序。實驗二 C和ASSEMBLY的混合編程一、預(yù)習(xí)內(nèi)容 C語言的

14、基本指令和編程方法,DSP中斷矢量表的內(nèi)容和中斷的執(zhí)行過程的知識。二、實驗?zāi)康?. 掌握C語言編寫源文件的方法。2. 掌握中斷矢量表的使用,理解BOOT LOADER的過程。3. 掌握定時器中斷的使用方法。4. 學(xué)習(xí)C和ASSEMBLY的混合編程。5. 學(xué)習(xí)CCS中圖形觀察動態(tài)數(shù)據(jù)的方式。6. 學(xué)習(xí)用定時器實現(xiàn)數(shù)字振蕩器的算法。三、實驗要求1. 設(shè)計一個數(shù)字振蕩器的實現(xiàn)算法,產(chǎn)生一個2KHZ的正弦信號。2. 定時器設(shè)置為25S產(chǎn)生一次中斷(等效于采樣速率40K)。3. 使用匯編語言編輯一個中斷矢量表,而主程序和中斷服務(wù)程序使用C語言編寫。4. 使用CCS圖形觀察功能,觀察輸出正弦信號。四、實驗

15、原理 1、數(shù)字振蕩器原理 設(shè)傳遞函數(shù)為正弦序列,其Z變換為:其中,其中,即: 設(shè)初始條件為0,求出上式的反Z變換得: 這是一個二階差分方程,其單位沖擊相應(yīng)為 。利用單位沖擊函數(shù)性質(zhì)知道,僅當(dāng)?shù)臅r候,為1,其他情況都為0。當(dāng)輸入為單位沖擊時,輸出就是我們需要的正弦序列。 可見,后,可以用遞推的方法求。根據(jù)上面的說明,設(shè)振蕩器頻率為2KHz,采樣頻頻率為40KHz,定時器每隔25S產(chǎn)生一次中斷,得到一個。遞歸的差分方程系數(shù)為:2.定時器使用 圖21 定時器組成框圖定時器是一個片內(nèi)遞減計數(shù)定時器,可以產(chǎn)生周期的CPU中斷,每個CPU時鐘周期,定時器的計數(shù)值減1。當(dāng)定時器計數(shù)器的值減到0時,產(chǎn)生一個定

16、時器中斷TINT。上圖是定時器的組成框圖。5000系列DSP中,5402和5420有兩個定時器,其他型號DSP只有一個。用戶使用三個寄存器來控制定時器,他們是TIM,PRD,TCR。他們地址如下:地址寄存器名稱0024hTIMTimer register0025hPRDTimer period register0026hTCRTimer control register 表2-1 定時器相關(guān)寄存器地址定時器啟動時,PRD的值裝入TIM作為初始值,然后在TIM中開始減計數(shù)。TCR為16bit的寄存器,包含了定時器的控制和狀態(tài)比特。具體如下所示:圖22 TCR各位說明具體含義參考相應(yīng)手冊。由于EV

17、M板的CPU時鐘是100MHz,(其中tc代表CPU時鐘),所以,我們設(shè)置PRD的值為2499h。定時器啟動的過程主要有四個方面:1)設(shè)置PRD;2)打開定時器中斷;3)TSS=1,停止定時器;4)設(shè)置TCR,包括TDDR,同時TSS=0,TRB=1,啟動定時器。3.DSP中斷的使用在C54X中,用戶可以通過中斷屏蔽寄存器IMR來決定開放或關(guān)閉一個中斷請求。圖23給出C5410的IMR寄存器各個比特定義。圖23 IMR的結(jié)構(gòu)其中,HPINT表示HPI接口中斷,INT3-INT0位外部引腳中斷,TXINT和TRINT位TDM串口中斷,BXINT0和BRINT0位BSP串口發(fā)送和接收中斷,TINT

18、位定時器0中斷。在中斷屏蔽寄存器中,比特為1便是允許CPU響應(yīng)對應(yīng)的中斷,0表示禁止。當(dāng)然要響應(yīng)中斷,ST1寄存器中的INTM還要為0,表示允許所有中斷。當(dāng)DSP相應(yīng)中斷時,PC指針指向中斷向量表中對應(yīng)中斷的地址,進入中斷服務(wù)程序。中斷向量表是C54X存放中斷服務(wù)程序的一段內(nèi)存區(qū)域,大小為80h。在中斷向量表中,每個中斷占4個字的空間,一般情況是將一條跳轉(zhuǎn)或者延時跳轉(zhuǎn)指令放在其中。中斷向量表的位置首先在連接文件中加以確定,用戶必須知道他在出現(xiàn)空間的起始地址,然后通過修改基地址來通知DSP,其基地址由PMST寄存器中的IPTR(157bits)決定。4.C和匯編語言混合編程前面提過,在同一個工程

19、里面,可以同時存在C語言源文件和匯編語言源文件。C和匯編是編輯源文件的兩種基本語言,各自有自己的優(yōu)點和缺點。對于C語言,他的優(yōu)點在于編程方便,缺點則是效率不高;匯編語言的編程效率很高,但是使用起來又很不方便。通常,混合使用,利用各自的優(yōu)點,避免缺點。主程序我們采用C語言,而關(guān)鍵代碼,特別是一些占用CPU較多的代碼,我們使用匯編語言來編輯。實驗中,我們把中斷矢量表作為一個匯編語言代碼段,使用單獨的一個匯編文件來生成。這個匯編文件有自己的段的定義,通過連接文件,我們把它放在一個有確定開始地址的程序段里,并記下這個地址。通常,中斷矢量表有一個基本格式,我們在編輯他的時候,可以直接參照這個格式:他的長

20、度為80h,每4條字長的指令代表著一個中斷產(chǎn)生時需要執(zhí)行的動作。中斷的順序是系統(tǒng)統(tǒng)一約定的。通常,對于不使用的中斷,我們用b _ret nop nop來處理。上面共三條指令,但是第一條是跳轉(zhuǎn)指令,是雙字指令,nop才是單字指令,所以,一共是4個字的指令長度,滿足矢量表要求。對于需要使用的中斷,我們在這里放置一個跳轉(zhuǎn)指令,轉(zhuǎn)移到中斷服務(wù)程序。在這個實驗中,中斷矢量表使用匯編語言,中斷服務(wù)程序使用C語言。所以,中斷服務(wù)程序位于另一個C語言文件中。如何實現(xiàn)匯編語言文件調(diào)用C語言程序,是我們要解決的一個問題。首先,我們在C語言文件中,建立一個中斷服務(wù)子程序,他同一般的C語言子程序有一點不同,就是他需要

21、在定義子程序時,加上一個interrupt的說明。如:void interrupt tint() y0 = aa*y1 + bb*y2;y2 = y1;y1 = y0; bufcon_buf=y0;con_buf+;if(con_buf = 128)con_buf=0; /* set breakpoint to show wave ! */在匯編文件中,我們則使用一個跳轉(zhuǎn)指令,把子程序的程序名作為一個標號,跳轉(zhuǎn)到這個標號,就是調(diào)用這個子程序。但是,有幾點要注意:一是匯編文件中的標號是子程序名稱,他的前面還有加上一個下劃線;二是匯編中,這個標號要聲明為全局標號;三是如果存在參數(shù)傳遞,而且參數(shù)只有

22、一個,那參數(shù)將放在A寄存器中,有多個參數(shù)時,過程比較復(fù)雜,在此不加闡述。C語言文件中,如果要使用匯編指令,方法比較簡單。把要執(zhí)行的匯編語句加上引號,加上括號,再在整個前面加上asm,如:asm( nop );在C語言文件編譯為匯編語言文件的時候,上面的匯編語句會不加變換地在該位置生成。如果是C語言文件要轉(zhuǎn)移到匯編文件中的某個位置,方法如下。首先在匯編文件的目的指令處加上一個標號,并把標號用下劃線開頭,同時聲明為全局標號。然后在C語言文件中,把這個標號作為一個子函數(shù)直接調(diào)用就可以了,這時,不需要加下劃線。5. CCS圖形觀察窗口圖形觀察窗口的作用是把數(shù)據(jù)區(qū)和程序區(qū)的某一塊連續(xù)存儲區(qū)域數(shù)據(jù),用笛卡

23、兒坐標系的縱坐標表示,橫坐標則是地址的歸一化值。我們在使這些數(shù)據(jù)變換的程序代碼處設(shè)置斷點,運行程序使用動畫執(zhí)行,那么,程序運行到斷點處不會停止,只會更新顯示區(qū)域。這樣,我們就可以觀察到一個動態(tài)的顯示效果。這個工具位于View/Graph/ Time/Frequency。使用圖形觀察工具之前需要對他的一些屬性進行設(shè)置,他的具體使用方法我們在實驗步驟中講解。五、實驗步驟1. 首先建立好一個工程,在這個工程中我們要建立三個相關(guān)文件。一個是C語言源文件,一個是匯編語言源文件,還有一個是連接文件。建立的方法同以前的實驗是一樣的。建立好這些文件后,需要把他們統(tǒng)統(tǒng)加入進建立的工程當(dāng)中。文件在命名的時候,一定

24、要注意文件名的后綴,也就是文件的類型要正確。2. 我們首先編輯中斷矢量表。中斷矢量表編輯的時候,他的長度要正確,每個中斷的位圖24 VC5410中斷順序圖置要清楚,在定時器中斷位置,加上一個跳轉(zhuǎn)指令,指向C源程序的中斷服務(wù)程序的地方。 中斷矢量表的匯編語言文件代碼如下 .mmregs.ref _c_int00.ref _tint .global _table;-; interrupte vector table !;-vector:rs b _c_int00 nop nopnmi b _ret nop nopsint17 b _ret nop nopsint18

25、b _ret nop nopsint19 b _ret nop nopsint20 b _ret .word 0,0sint21 b _ret .word 0,0sint22 .word 01000h .word 0,0,0sint23 .word 0ff80h .word 0,0,0sint24 .word 01000h .word 0,0,0sint25 .word 0ff80h .word 0,0,0sint26 .word 01000h .word 0,0,0sint27 .word 0ff80h .word 0,0,0sint28 .word 01000h .word 0,0,0si

26、nt29 .word 0ff80h .word 0,0,0sint30 .word 01000h .word 0,0,0int0 b _ret nop nopint1 b _ret nop nopint2 b _ret nop noptint b _tintnopnopbrint0 b _ret nop nopbxint0 b _ret nop noptrint b _ret nop nopdmac1 b _ret nop nopint3 b _ret nop nophpint b _ret nop nopq26 .word 0ff80h .word 0,0,0q27 .word 01000h

27、 .word 0,0,0dmac4 b _ret nop nopdmac5 b _ret nop nopq30 .word 0ff80h .word 0,0,0q31 .word 01000h .word 0,0,0;-; end of interrupte vector table !;-_ret rete3. 對于C語言文件,主要分為兩個部分。首先是對系統(tǒng)參數(shù)的設(shè)置,包括DP指針,矢量表的起始地址,定時器的參數(shù)設(shè)置。這些設(shè)置過程,實際上就是對每個相關(guān)的寄存器的值的設(shè)定。為了正確的設(shè)置這些值,一是要理解每個寄存器的每個比特代表什么意思,而是要通過分析設(shè)計的要求,計算出這些值的大小。如果對寄存

28、器的比特位的意思不是很理解,可以使用CCS的Help菜單。CCS的Help功能非常強大,幾乎包含了編程時候需要的關(guān)于DSP的一切信息。對于這些寄存器賦值的方法有兩種,一種是使用C語言中嵌套匯編語句的方法,因為這樣可以利用各個寄存器的助記符,直接賦值給這些助記符;二是可以使用C語言的指針功能。我們知道,DSP的所謂每一個寄存器,實際上都是存儲器映射寄存器,他們本質(zhì)上都是DSP位于數(shù)據(jù)區(qū)開始的一些存儲空間。用指針的方法對這些地址賦值,實際上就是對寄存器賦值。同學(xué)們可以使用兩種方法分別嘗試,在數(shù)據(jù)空間觀察兩種方法結(jié)果的異同。 C語言文件的第二部分是中斷服務(wù)程序。服務(wù)程序的子程序名稱要和中斷矢量表中跳

29、轉(zhuǎn)指令的標號一樣,只是沒有了下劃線。指令的內(nèi)容就是根據(jù)前面的推導(dǎo),使用遞推的方法,每次執(zhí)行一次中斷函數(shù)就產(chǎn)生一個數(shù)據(jù)。程序的原理前面已經(jīng)講解了。C程序代碼如下:#include stdio.h#define IMR 0#define ST0 6#define ST1 7#define TIM 0x24#define PRD 0x25#define TCR 0x26#define PMST 29int con_buf=0;float buf128; /* save out wave buffer ! */float y0;float y1=0.30901699;float y2=0.587785

30、25; /* y2= y1*A */const float aa=1.90211304;const float bb=-1.; main()int *dest; dest = (int *)IMR; *dest = 0; dest = (int *)PMST; *dest = 0x1020;/*interrupt vector at 0x1000 */ dest = (int *)TCR; *dest = 0x0010; dest = (int *)PRD; *dest = 2499; dest = (int *)IMR; *dest = 0x0008;/* enable timer0 TIN

31、T0 */ dest = (int *)TCR; *dest = 0x0030; *dest = 0x0000; asm ( rsbx intm);void interrupt tint() y0 = aa*y1 + bb*y2;y2 = y1;y1 = y0; bufcon_buf=y0;con_buf+;if(con_buf = 128) con_buf=0; /* set breakpoint to show wave ! */4對于連接文件的編輯,由于出現(xiàn)了C語言文件,系統(tǒng)默認的段增加了。如果是單獨的匯編文件我們知道,只有.text和.data、.bss是三個默認段,但是,有了C文件,增加了其他一些段,主要有.cinit、.switch、.const、.systmem、.stack等。這些段是在由C編譯為匯編的時候產(chǎn)生的,不同的段運用于存放不

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論