CCS中DSP、BIOS工具的使用參考模板_第1頁
CCS中DSP、BIOS工具的使用參考模板_第2頁
CCS中DSP、BIOS工具的使用參考模板_第3頁
CCS中DSP、BIOS工具的使用參考模板_第4頁
CCS中DSP、BIOS工具的使用參考模板_第5頁
已閱讀5頁,還剩26頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、評語學號 成績 DSP技術課程論文 題目 CCS中DSP/BIOS工具的使用 作 者 班 級 _ 院 別 專 業 _ 完成時間 1 / 31目錄一、 DSP/BIOS簡介1二、 DSP/BIOS的組件構成1三、DSP/BIOS的啟動順序 2四、DSP/BIOS的配置 2五、基礎類的DSP/BIOS API調用15六、DSPBIOS的中斷、優先級 22七、參考文獻 23摘要:DSP/BIOS的靜態配置是利用CCS提供的配置工具完成,包括圖形化配置工具和文本配置工具。圖形化工具層次清晰,比較直觀,而文本工具更加靈活。一、 DSP/BIOS簡介DSP/BIOS是CCS中集成的一個簡易的嵌入式實時操作

2、系統,能夠大大方便用戶編寫多任務應用程序。DSP/BIOS擁有很多實時嵌入式操作系統的功能,如任務的調度,任務間的同步和通信,內存管理,實時時鐘管理,中斷服務管理等。有了它,用戶可以編寫復雜的多線程程序,并且會占用更少的CPU和內存資源。DSP/BIOS是一個可用于實時調度、同步,主機和目標機通信,以及實時分析系統上的一個可裁減實時內核,它提供了搶占式的多任務調度,對硬件的及時反應,實時分析和配置工具等。同時提供標準的API接口,易于使用。它是TI的eXpressDSP實時軟件技術的的一個關鍵部分。二、 DSP/BIOS的組件構成DSP/BIOS在一個主機/目標機環境中的組件分布如下所示: D

3、SP/BIOS API:編寫的程序可以調用API接口函數; DSP/BIOS配置:創建的配置文件定義了程序使用的靜態BIOS對象; DSP/BIOS分析工具:集成在CCS上的一些BIOS分析工具可以對運行與目標設備上的程序進行監測,包括CPU負載、時間、日志、線程執行狀態等。DSP/BIOS分為很多模塊,提供的所有API函數都按照模塊分類,以模塊名加下劃線開頭來命名,如圖40所示為DSP/BIOS的全部模塊。圖40三、DSP/BIOS的啟動順序當DSP/BIOS的應用程序啟動時,一般遵循下面的步驟:(一) 初始化DSP:DSP/BIOS程序從C/C+環境入口c_int00開始運行。對于C600

4、0平臺,在c_int00開始處,系統棧指針(B15)和全局頁指針(B14)被分別設置在堆棧斷的末尾和.bss斷的開始。控制寄存器AMR、IER、CSR等被初始化;(二) 初始化.bss段:當堆棧被設置完成后,初始化任務被調用,利用.cinit的記錄對.bss斷的變量進行初始化;(三) 調用BIOS_init初始化用到的各個模塊:BIOS_init調用MOD_init對配置用到的各個模塊進行初始化,包括HWI_init、HST_init、IDL_init等;(四) 處理.pinit表:.pinit表包含一些指向初始化函數的指針,對C+程序,全局對象類的創建也在此時完成;(五) 調用用戶程序的ma

5、in函數:用戶main函數可以是C/C+函數或者匯編語言函數,對于匯編函數,使用_main的函數名。由于此時的硬件、軟件中斷還沒有被使能,所以在用戶主函數的初始化中需要注意,可以使能單獨的中斷屏蔽位,但是不能調用類似HWI_enable的接口來使能全局中斷;(六) 調用BIOS_start啟動DSP/BIOS:BIOS_start在用戶main函數退出后被調用,它負責使能使用的各個模塊并調用MOD_startup啟動每個模塊。包括CLK_startup、PIP_startup、SWI_startup、HWI_startup等。當TSK管理模塊在配置中被使用時,TSK_startup被執行,并且

6、BIOS_start將不會結束返回;(七)執行idle循環:有兩種方式進入idle循環。當TSK管理模塊使能時,任務調度器運行的TSK_idle任務調用IDL_loop在其它任務空閑時進入idle循環;當TSK模塊未被使用時,BIOS_start調用將返回,并執行IDL_loop進入永久的idle循環,此時硬件和軟件中斷可以搶占idle循環得到執行。由于idle循環中管理和主機的通信,因此主機和目標機之間的數據交互可以進行了。四、DSP/BIOS的配置DSP/BIOS的靜態配置是利用CCS提供的配置工具完成,包括圖形化配置工具和文本配置工具。圖形化工具層次清晰,比較直觀,而文本工具更加靈活。通

7、常使用圖形化的配置方法,下面對主要的模塊配置做一些介紹。(一) Global Setting Properties右鍵點擊“Global Settings”,點擊“Whats This”,會彈出幫助窗口,該文件中有Global Setting Properties的各項設置說明。下面介紹的其他如MEM、LOG等配置都可以用同樣的方法得到相應的幫助。選擇彈出菜單中的“Properties”,如圖41所示。圖41彈出如圖42所示對話框:圖42一般選擇默認設置即可,CLKOUT項需要根據DSP硬件單板提供的工作時鐘設置,Himalaya通常運行在1GHz頻率。DSP Endian Mode項根據實際

8、情況設置。(二) MEM設置MEM模塊設置中可以根據具體情況設置不同的內存段,其中存在一個默認的IRAM片內內存段。需要注意的是,首先必須在IRAM段上設置一個heap段落,用于BIOS的內部使用。設置方法是在IRAM段上右鍵選擇“Properties”,彈出如圖43對話框,必須設置紅線框中的選項,heap size可根據情況具體設置。圖43接下來配置MEM全局屬性,右鍵點擊配置窗口中的“MEM”,如圖44所示:圖44點擊“Properties”,彈出如圖45所示窗口:圖45如圖紅線框中,兩個heap段都要選擇為IRAM,“Stack Size”項需要根據實際情況設置最大的棧大小,其他使用缺省

9、設置即可。在圖44的菜單中,點擊“Insert MEM”可創建新的內存段。在新的內存段名上右鍵選擇“Properties”彈出如圖43窗口,根據情況設置base(基地址)、len(段長度)、heap size(用于MEM動態內存分配的堆大小)。(三) LOG設置LOG用于輸出和記錄一些打印信息,默認存在一個LOG_system對象,是系統內部用來處理打印信息的,不需要去設置。可以增加新的LOG對象,用來在應用程序中輸出打印信息。如圖46,在LOG標簽上右鍵選擇“Insert LOG”,填寫對象名LOG_test即建立了一個新的LOG對象。圖46在LOG_test標簽上右鍵選擇“Properti

10、es”,彈出如圖47窗口,可對此LOG對象屬性作一些設置。具體設置含義可通過Help查看。圖47(四)CLK設置在CLK屬性中通常選擇定時器Timer0作為DSP/BIOS的基準時鐘,計時分辯率設置為每秒1000次中斷,在1GHz系統時鐘下,近似為每次定時中斷間隔999.996微秒。Timer Mode選擇為32bit unchained模式,即使用TCI6482的TMR0的TIMLO作為Timer0,而TIMHI還可以作其它用途使用。CLK屬性配置界面如圖48所示:圖48(五) HWI設置HWI(硬中斷)中包含HWI_INT4到HWI_INT15可用來定義用戶自己的硬件中斷,HWI_RESE

11、T、HWI_NMI和HWI_RESERVED不要去改動。如圖49,每個硬HWI的優先級從上到下逐漸降低。圖49選擇HWI_INT10為例,來設置EMAC/MDIO的中斷,需要填寫中斷事件號17,并且填寫中斷服務程序名(C函數前面需要加下劃線)如圖50所示:圖50在Dispatcher頁面,選擇“Use Dispatcher”由BIOS代理控制中斷的確認和清除,不需要用戶中斷服務程序干預,比較簡便。如圖51:圖51(六) SWI設置SWI(軟中斷)的優先級在HWI之后,但是比TSK高,可以通過右鍵菜單中的“Insert SWI”創建一個SWI對象,可以指定SWI內部優先級,從0(最低)到14(最

12、高)。如圖52:圖52(七) TSK設置在TSK Manager(任務管理器)中可以根據需要創建各種任務,任務間是根據優先級搶占策略來進行調度的,TSK提供有多種優先級別,包括-1(Suspend)、0(Idle)、1(最低)到15(最高)。如圖53:圖53在TSK Manager上右鍵選擇“Insert TSK”并填寫任務名稱后就可以創建一個任務,在相應任務上右鍵選擇“Properties”可對任務屬性進行設置,如圖54:圖54Stack Size(最大堆棧大小)和Priority(優先級)需要根據任務的具體情況進行設置。在頁面,填寫任務實體函數名(C函數前面加一個下劃線),如圖55:圖55

13、(八) Synchronization設置DSP/BIOS中任務間的通信和同步可由SEM、MBX、QUE、LCK四個模塊完成: SEM(信號量):用于任務同步和互斥,有計數功能,根據需要使用; MBX(郵箱):也用于任務同步,可以傳遞少量數據,根據需要使用; QUE(隊列):可實現任務同步和資源的共享,根據需要使用; LCK(資源鎖):實現對共享資源的互斥,根據需要使用。四種同步模塊對象都可以通過各自的右鍵菜單中“Insert ”來創建,并可對其屬性作相應的設置。如圖56所示:圖56(九) Input/Output設置這里可以設置一些輸入/輸出相關的高級設置,具體可通過CCS的幫助項來了解。一

14、般不需要進行設置。只有RTDX(實時數據交換),需要根據目標環境的情況對數據交換模式進行一下選擇,用來在調試中主機和目標機進行數據交換。可以是仿真器環境的JTAG模式,或者是模擬器環境的Simulator模式。如圖57所示:五、基礎類的DSP/BIOS API調用(一)時鐘管理CLK1.Uns ncounts = CLK_countspms(void)返回每毫秒的定時器高分辨率時鐘的計數值2.LgUns currtime = CLK_gethtime(void)返回高分辨率時鐘的計數值 超過32bit歸零高分辨率時鐘是DSP時鐘除以(TDDR+1)3.LgUns currtime = CLK_

15、getltime(void)返回低分辨率時鐘的計數值 超過32bit歸零高分辨率時鐘是DSP時鐘除以(TDDR+1)再除以(PRD+1)4.Uns period = CLK_getprd(void)返回CLK管理器周期寄存器的值(二)周期函數PRD1.LgUns num = PRD_getticks(void)返回32位周期函數管理計數值2.void PRD_start(PRD_Obj* period)啟動PRD模塊計數器,一般地,mode=one-shot3.void PRD_stop(PRD_Obj* period)關閉PRD模塊計數器4.void PRD_tick(void)對周期模塊的

16、計數器加1,以便周期模塊管理器確定哪個周期性函數得以運行(三)軟件中斷管理SWI1.void SWI_andn(SWI_Obj* swi, Uns mask)mask 屏蔽字參數將郵箱值與mask做與運算,并用結果代替以前的郵箱值,若為0,啟動軟件中斷,恢復郵箱初始值2.void SWI_andn(SWI_Obj* swi)將郵箱值減1,并用結果代替以前的郵箱值,若為0,啟動軟件中斷,恢復郵箱初始值3.void SWI_disable(Void)禁止軟件中斷4.void SWI_enable(Void)使能軟件中斷5.Uns num = SWI_getmbox(void)返回當前SWI對象在被

17、執行的郵箱值,若中斷已經開始執行,DSP/BIOS會先保存此值6.Uns key = SWI_getpri(SWI_Obj * swi)返回指定的SWI對象的優先級7.void SWI_inc(SWI_Obj * swi)將指定的SWI對象的郵箱值加1,同時啟動軟件中斷,就算用戶調用多次,最終執行一次。8.void SWI_or(SWI_Obj* swi, Uns mask)mask 屏蔽字參數將啟動指定的軟件中斷,并將此軟件中斷的郵箱值與mask做與運算,并用結果代替以前的郵箱值,等到中斷完成之后,郵箱值恢復為初始值,一般地,調用SWI_getmbox獲得觸發此軟件中斷的郵箱值9.void

18、SWI_post(SWI_Handle swi)啟動指定的SWI對象的軟件中斷,此函數不受郵箱值的影響,也不影響郵箱值。一般地,周期性低啟動一個軟件中斷,將_SWI_post填入PRD對象的函數設置欄,啟動軟件中斷的參數寫入arg010.Uns key = SWI_raisepri(Uns mask)提高SWI軟件中斷的優先級,一般地key = SWI_raisepri(SWI_getpri(&swi_1);-access shared resouces-SWI_restorepri(key)11.void SWI_restorepri(Uns key)恢復原來的優先級12.SWI_Obj *

19、 swi = SWI_self(void)當前執行的SWI對象的軟件中斷的地址(四)信息輸出管理LOG1.void LOG_disable(LOG_Obj * log)關閉指定對向的日志功能2.void LOG_enable(LOG_Obj * log)開啟指定對向的日志功能3.void LOG_error(String format, Arg arg0)void LOG_message(String format, Arg arg0)前一個函數可以將一個事件、數據或出錯信息按照指定的格式串寫入系統日志,不受TRC跟蹤管理模塊的影響,后一個函數類似于前一個函數,但是受到TRC跟蹤管理模塊的影響

20、4.void LOG_event(LOG_Obj * log, Arg arg0, Arg arg1, Arg arg2)將未格式化的事件消息寫入日志中5.void LOG_printf(LOG_Obj * log, String format, int arg0, int arg1)指定的LOG窗口顯示消息 %d %x %o %s6.void LOG_reset(LOG_Obj * log)復位日志緩沖區(五)存儲器管理MEM1.void * addr = MEM_alloc(int segid,Uns size,Uns align)指定存儲段分配連續塊,返回起始地址segid = 存儲段的

21、標識符或者ID號size 塊大小 等于多少個字align 邊界條件 只為0或2的冪 若align為0、1 則無約束2.void * addr = MEM_calloc(segid, size, align)分配內存并初始化為03.int segid = MEM_define(Ptr base, Uns length, MEM_Attrs* attrs)定義一個新的存儲段。返回值為存儲段的ID標號,attr參數為NULL,會按照默認參數進行配置,段的參數由結構體type MEM_Attrs規定,此函數僅在main函數中使用base: 新段的基地址length:段長度attrs:段屬性4.bool

22、 status = MEM_free(segid,addr,size)釋放申請的動態內存 不能在SWI和HWI中調用,調用之前,用LCK中API查看內存塊的鎖定情況5.void MEM_redefine(segid,base,length)重新定義一個存儲段,只能在main中調用6.bool status = MEM_stat(int segid, MEM_Stat * statbuf)segid 存儲段標識符statbuf 狀態緩存區指針 struct mem_statUns size;/存儲段大小Uns used;/已經使用的數量Uns length;/最大連續存儲塊長度同理:若segid

23、有效,則MEM_stat返回TRUE不能在SWI和HWI中使用,應判斷鎖定情況7.void * addr = MEM_valloc(int segid, Uns size, Uns align, char value)先申請內存,初始化為指定的值value(六)C6000專用模塊C64x1.Uns oldmask = C64_diableIER(Uns mask)關閉相應的中斷 返回值實際屏蔽的中斷2.void C64_enableIER(Uns oldmask)開放相應的中斷Uns oldmask;oldmask = C64_disableIER(0x1); / disable INT0C6

24、4_enableIER(oldmask);/ enable INT03.void C64_plug(int vecid, Fxn fxn, int dmachan)插入一個中斷向量int vecid: 中斷序號Fxn fxn: 中斷服務程序的函數指針int dmachan: 插入操作使用的DMA通道將ISFP寫到中斷服務表IST中。若IST在外部RAM,則CPU復制代替DMA,此時DMA為-1IST在片內RAM時,使用DMA方式,是0,1,2,3 用戶保證在函數調用時該DMA通道有效(七)統計模塊STS1.void STS_add(STS_Obj * sts, LgInt value)使用我們

25、提供的數據更新STS統計對象的Total,Count,Max等參數傳入一個32位參數,Count加1,Total累加傳遞的32位參數,MAX記錄傳遞參數的最大值2.void STS_delta(STA_Obj * sts, LgInt value)每個對象都包含有初始值,該初始值由配置文件指定或者由STS_set函數設置STS_delta先計算當前傳遞參數與先前初始值只差,然后調用STS_add更新統計累加值一般和STS_set一起用eg:STS_set(&sts,CLK_gethtime();STS_delta(&sts,CLK_gethtime();3.void STS_reset(STS

26、_Obj * sts)復位統計對象中的累加值。Count和Total設置為0.MAX成為最大的負值。4.void STS_set(STS_Obj * sts, LgInt value)監視或統計程序的執行時間(八)統計類模塊TRC1.TRC_LOGCLK 日志記錄定時器中斷2.TRC_LOGPRD 日志記錄周期時隙和周期函數的開始3.TRC_LOGSWI 日志記錄軟件中斷的啟動和完成4.TRC_LOGTSK 日志記錄任務處于準備好、開始、停止、繼續執行、終止等事件5.TRC_STSHWI 收集關于HWI統計數據6.TRC_STSPIP 寫管道和讀管道幀進行計數7.TRC_STSPRD 執行期間

27、CLK時隙個數的統計數據8.TRC_STSSWI SWI執行時間的統計數據9.TRC_STSTSK TSK執行時間的統計數據 從TSK準備好到調用TSK deltatime都要收集10.TRC_USER0 AND TRC_USER1 和TRC_query一起用 執行和忽略結果的設備調用11.TRC_GBLHOST 執行所有的隱藏儀器功能,此比特位能夠開始或停止收集所有開啟的跟蹤類型12.TRC_GBLTARG 執行所有的隱藏儀器功能,此比特位只能被目標程序設置(九)任務管理 TSK任務管理模塊1. void TSK_checkstacks(TSK_Handle oldtask,TSK_Hand

28、le newtask)無論是新任務還是老任務,如果堆棧的最后位置上都沒有RG_STACKSTAMP標識,那么TSK_checkstacks就會報錯SYS_abort,出現這種情況可能是由于上一個任務堆棧溢出或無效的存儲占用了新任務的堆棧一般地,用TSK_checkstacks(TSK_self(),TSK_self()來檢查堆棧定義Switch函數,這樣在任務切換時自動調用堆棧檢查函數:void myswitchfxn(TSK_Handle oldtask, TSK_Handle newtask).TSK_checkstacks(oldtask,newtask);.2. TSK_Handle

29、task = TSK_create(Fxn fxn, TSK_Attrs * attr, Arg arg,.)創建一個調用函數fxn的任務對象,返回新對象的句柄,失敗返回NULL。調用此函數是動態創建,而在配置工具中創建是靜態創建,二者效果一樣。靜態創建的任務對象,創建函數將在BIOS_start函數中自動調用。BIOS_start函數在main函數之后,在后臺IDL循環之前運行。而動態創建的任務處于Ready狀態。函數參數最多不超過8個。任務對象函數fxn返回時,自動調用TSK_exit函數。解析:TSK_Attrs * attrs 任務參數指針struct TSK_Attrsint pri

30、ority;Ptr stack;Uns stacksize;#ifdef _64_ / imitate C55 series. to checkUns sysstacksize;#endifUns stackseg;Ptr environ;String name;bool exitflag;3. void TSK_delete(TSK_Handle task)從所有內部隊列里面刪除這個任務,并且調用MEM_free釋放任務對象和堆棧。只能刪除處于結束狀態的任務,也可調用刪除的鉤子函數。void myDeleteFxn(TSK_Handle task);4. void TSK_deltatime

31、(TSK_Handle task)累計從任務準備好到執行此函數時候的時間差如果未調用此函數,那么就算打開任務統計累加器選項,統計對象也不會更新一般地,統計時先用TSK_settime函數記錄起始點,此函數記錄終點。5. void TSK_settime(TSK_Handle task)設定統計初始值void task()-do some startup work-TSK_settime(TSK_self);for(;)SIO_get(.);-process data-TSK_deltatime(TSK_self);假如流式IO沒有準備好,那么該API函數會阻塞(Blocked),任務切換,一段

32、時間后,流式IO數據準備好了,此時發出READY信號,將本任務置為ready狀態,此時TSK_settime會重新記錄時間。6. void TSK_disable(void)全局關閉內核調度機制,Busy-Shutting-Down狀態。只有當前任務可行,其余所有任務禁止。此函數不會禁止中斷,所以在中斷開始前需要調用此函數保證中斷發生時不會發生任務切換。可以嵌套,但是調用幾次TSK_disable,就得相應調用幾次TSK_enable7. void TSK_enable(void)全局開啟內核調度機制8. void TSK_exit(void)終止當前任務運行。如果所有任務都被終止,則DSP/

33、BIOS會調用SYS_exit終止程序。無論什么時候,任務從頂層函數返回時,都是自動調用此函數。可以注冊一個退出輔助函數 void myExitFxn(void)這樣,在任務被設置為TSK_TERMINATED模式之前,會調用這個輔助函數。9. Ptr environ = TSK_getenv(TSK_Handle task)返回任務環境指針,這個指針指向一個該任務可以訪問的全局屬性的結構。若程序定義多個鉤子對象,那么HOOK_getenv函數可以獲取設置的環境指針。10. void TSK_setenv(TSK_Handle task, Ptr environ)設置指定任務的環境指針。若程序

34、定義多個鉤子對象,那么HOOK_setenv函數可以為每個鉤子和任務對象的組合體設置獨立的環境指針。11. int errno = TSK_geterr(TSK_Handle task)每個任務對象都有一個包含任務錯誤號的存儲單元。初始值為SYS_OK12. void TSK_seterr(TSK_Handle task, int errno)改變錯誤號13. String name = TSK_getname(TSK_Handle task)返回任務的名字。對于靜態對象來說,必須打開Allocate Task Name on Target對于動態對象來說,TSK_getname返回attrs

35、.name字段14. int priority = TSK_getpri(TSK_Handle task)返回優先級15. int oldpri = TSK_setpri(TSK_Handle task, int newpri)設置優先級設置優先級對于TSK_BLOCKED狀態任務只是優先級改變,而不會改變狀態;對于TSK_READY狀態的任務而言,可能會改變運行狀態。16. STS_Handle sts = TSK_getsts(TSK_Handle task)獲得統計對象句柄,以便查看數據17. void TSK_sleep(Uns nticks)暫停任務的時鐘個數,此時鐘數可能比真實的暫

36、停時鐘少一個時鐘(告警時鐘)18. void TSK_itick(void)對告警時鐘加1,以便讓TSK_sleep或者SEM_pend函數暫停執行的任務恢復到ready。一些暫停的任務可能會隨著告警時鐘的增加而超時,從而就緒。19. void TSK_tick(void)對告警時鐘加1,以便讓TSK_sleep或者SEM_pend函數暫停執行的任務恢復到ready。一些暫停的任務可能會隨著告警時鐘的增加而超時,從而就緒。可以在中斷服務程序和當前任務中調用,后者在控制超時非常有用。20. Uns currtime = TSK_time(void)返回系統告警時鐘的當前值。(由于延遲,只能得到一

37、個大概的系統時鐘)21. TSK_Handle currtask = TSK_self(void)返回當前任務對象的句柄22. void TSK_stat(TSK_Handle task,TSK_Stat * statbuf)返回任務的屬性參數和狀態信息struct TSK_StatTSK_Attrs attrs;/任務參數TSK_Mode mode;/任務執行模式Ptr sp;/任務當前堆棧指針Uns used;/任務堆棧曾經使用的最大值注意:任務比HWI和SWI中斷優先級要低,所以當任務被中斷時,還是返回TSK_RUNNING,因為中斷完成后任務繼續運行。23. void TSK_yield(void)強制任務切換,請注意,任務可以被中斷,但是,任務之間必須依靠切換來進行,就是說,即便當前有高優先級任務就緒,它不能被執行,除非切換。此函數用于任務之間的同步。(十) 任務管理 HOOK鉤子函數管理模塊HOOK模塊管理者一組涉及鉤子函數的對象。DSP/BIOS初始化期間,每一個HOOK對象都分配了一個數字標識符。每個HOOK模塊都有一個初始化函數,該

溫馨提示

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

評論

0/150

提交評論