第4章DSP軟件開發(fā)與C語言編程_第1頁
第4章DSP軟件開發(fā)與C語言編程_第2頁
第4章DSP軟件開發(fā)與C語言編程_第3頁
第4章DSP軟件開發(fā)與C語言編程_第4頁
第4章DSP軟件開發(fā)與C語言編程_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第4章DS軟件開發(fā)與C語言編程本章主要內(nèi)容 :? DSP 開發(fā)工具與軟件開發(fā)流程 (DSP Development Tools and Software Development Flow)? 集成開發(fā)環(huán)境 CCS (IDE Code Composer Studio)?DSP的 C工程文件(DSP C Project Files)?公共目標(biāo)文件格式 COFF(The Common Object File Format)?鏈接命令文件 (Linking Command Files)?DSP C 語言程序設(shè)計(jì)基礎(chǔ) (DSP C Programmi ng Fun dame ntals)?數(shù)據(jù)類型 (D

2、ata Types)?運(yùn)算符與基本語句(Operators and Statements)?函數(shù) (Functions)?指針 (Pointers)?編譯預(yù)處理命令 (Preprocessor Directives)? C語言與匯編語言混合編程 (Hybrid Programming with C and Assembly)? C28x DSP 編譯器的關(guān)鍵字(Keywords for the C28x DSP Compiler)?DSP C程序舉例(DSP C Program Examples)4.1DSP開發(fā)工具與軟件開發(fā)流程1. DSP開發(fā)工具DSP 開發(fā)工具包括硬件與軟件兩部分,即 D

3、SP 開發(fā)系統(tǒng)與集成開發(fā)環(huán)境 CCS(Code Composer Studio)。DSP開發(fā)系統(tǒng)稱為硬件仿真器 (Emualtor),有PC機(jī)插卡式(PCI總線)、 并行接口式、USB接口式等。目前廣泛采用USB接口式,即DSP開發(fā)系統(tǒng)通過 USB接口與PC機(jī)相連,DSP開發(fā)系統(tǒng)再通過JTAG(基于掃描的仿真)接口與用戶目標(biāo)板相連, 實(shí)現(xiàn) DSP 軟硬件調(diào)試與程序燒寫。TI 公司及其第三方提供的開發(fā)工具有 XDS510(Extended Development System) 硬件仿 真器、 DSP 教學(xué)實(shí)驗(yàn)系統(tǒng)、 DSP 初學(xué)者工具 DSK(DSP Starter Kit) 、 DSP 評估

4、板 (也稱為 EVM 板、 DEMO 板、目標(biāo)板、實(shí)驗(yàn)板等 )。DSP 評估板除了包括基本的 DSP 芯片及必要的電源、時鐘、復(fù)位電路外,經(jīng)常包括 用于程序調(diào)試的片外擴(kuò)展存儲器、擴(kuò)展的A/D、 D/A 轉(zhuǎn)換器、鍵盤顯示電路、E2PROM芯片、 RS232 串行接口、 SPI 接口、 CAN 接口的驅(qū)動電路、簡單應(yīng)用電路等。圖 4-1 給出了一個典型的 2812 EVM 板的電路組成示意圖。TMS320F2812JTAG150MHZ18KW RAM128KW FlashA/DUARTCAN16路模擬量|.64KW RAM擴(kuò)展引腳數(shù)據(jù)地址控制I/O驅(qū)動驅(qū)動1jr1RY5 -23 2CAN4個開關(guān)圖

5、 4-1 TMS320F2812 EVM可以看出,除了 TMS320F2812芯片及其電源、字RAM,D/A轉(zhuǎn)換芯片 DAC7617等,增加了 CAN原理框圖時鐘、復(fù)位電路外, 驅(qū)動器、串口驅(qū)動器、CPLD電路等,還擴(kuò)展了64K設(shè)置了 JTAG接口、串行接口、 CAN接口及擴(kuò)展接口插座。該2812 EVM板的主要性能指標(biāo)如下:(1) TMS320F2812,運(yùn)行速度 150MIPS。(2) 片內(nèi) RAM 18K 字。(3) 擴(kuò)展 RAM 64K 字。 片內(nèi)16路12位A/D轉(zhuǎn)換器,最大采樣速率12.5MSPS。 擴(kuò)展的4路12位D/A轉(zhuǎn)換器 DAC7617。兩路UART串行接口,符合 RS-2

6、32C標(biāo)準(zhǔn)。16路PWM輸出。(8) CAN總線標(biāo)準(zhǔn)接口。(9) 用戶開關(guān)與指示燈。(10) 片內(nèi)128K字Flash存儲器,帶128位加密位。(11) 具有IEEE1149.1兼容的邏輯掃描電路即 JTAG接口,用于仿真調(diào)試。(12) +5V電源輸入,板上3.3V, 1.8V電源管理。2 軟件開發(fā)流程軟件開發(fā)流程圖如圖4-2所示,主要有以下步驟:(1) 編輯:生成源程序(*.asm, *.c )、頭文件(*.h)與命令文件(*.cmd)。(2) 編譯與匯編:生成目標(biāo)文件(*.obj)及列表文件(*.lst)。(3) 鏈接:生成可執(zhí)行代碼文件(*.out)及用于存儲器分配的映射文件(*.map

7、)。 調(diào)試:通過JTAG接口下載到目標(biāo)系統(tǒng)。(5)通過JTAG接口將程序燒寫到Flash存儲器。115昭“乍野旳也汕I 皿#直接編輯生成。匯編語言源文件除了包含程序指令,也包含匯編器命令 (Assembler Directive) 和宏命令 (Micro Directive) 。匯編器命令采用一種指令形式的描述性語言來對匯 編過程進(jìn)行編程和控制。宏命令則提供了一種用戶可以自定義指令的方式,用戶可以將 一個復(fù)雜的匯編語言代碼塊或重復(fù)使用的代碼塊定義為一個宏,在源文件中,通過引用 宏不僅可以簡化文件的編寫, 也可減小文件的長度。 COFF(Common Objective File Format

8、, 公共目標(biāo)文件格式 )是一種二進(jìn)制目標(biāo)文件格式,這種格式的特色是將程序代碼和數(shù)據(jù)塊 分成段 (Section) 。段是目標(biāo)文件中的最小單位,每個段的代碼和數(shù)據(jù)最終占用連續(xù)的存儲 器地址,一個目標(biāo)文件中的各段都是互相獨(dú)立的和有區(qū)別的。(3) 鏈接器CCS的鏈接器是其外殼程序的第三部分,用以將匯編器生成的多個COFF目標(biāo)文件組合成一個可執(zhí)行的COFF可執(zhí)行輸出文件(.out)。通常,匯編器生成的 COFF目標(biāo)文件中各 代碼段或數(shù)據(jù)段(如.text、.data和.bss)只具有相對地址,它與系統(tǒng)的物理存儲器地址之間 沒有任何關(guān)系,必須對其進(jìn)行地址定位和分配后,這些目標(biāo)文件才能變成可執(zhí)行的文件。 C

9、CS的鏈接器有三個主要的作用:支持用戶將COFF文件中的各代碼段和數(shù)據(jù)段分配到實(shí)際目標(biāo)系統(tǒng)的物理存儲器中; 根據(jù)用戶的分配要求,對各代碼段和符號重新進(jìn)行 安排,并賦予其最后確定的物理地址;處理多個文件之間那些沒有被定義的外部引用(變量名或函數(shù)名等)。用戶可以通過鏈接命令文件 (.cmd)來描述實(shí)際目標(biāo)系統(tǒng)的物理存儲 器地址并進(jìn)行段的分配,鏈接器將調(diào)用該命令文件實(shí)現(xiàn)對目標(biāo)文件的鏈接工作。(4) 歸檔器 為了重復(fù)利用源代碼,減小源代碼的編寫工作量,使用宏是一種有效的辦法,而大量的宏可以被組織在一起形成一個專門的庫。同樣,通用函數(shù)的編寫也會節(jié)省代碼量。 例如,將一個算法程序?qū)懗蓪iT的函數(shù),這是實(shí)現(xiàn)模

10、塊化編程一般采用的方法,大量這 樣的函數(shù)被組織在一起形成一個庫文件。當(dāng)編寫一個新的用戶程序時,有效地利用這些 宏庫或者函數(shù)庫不僅可以大大節(jié)省程序的開發(fā)工作量,而且還可以方便地實(shí)現(xiàn)程序移植。 歸檔器就是用于建立這樣的宏庫或者函數(shù)庫的非常有用的軟件工具。歸檔器可以幫助用 戶將許多單個的文件組成一個庫文件,這些文件可以是源文件,也可以是匯編后的目標(biāo) 文件。無論是匯編器或者是鏈接器都接受由歸檔器建立的庫文件作為輸入,匯編器接受 源文件庫作為輸入,而鏈接器則接受目標(biāo)文件庫作為輸入。例如,當(dāng)匯編器對用戶源程 序進(jìn)行匯編時,它遇到一個宏引用,則匯編器會搜索歸檔器建立的宏庫以找到被引用的 宏并將其嵌入引用宏的

11、位置。同理,當(dāng)鏈接器對用戶程序進(jìn)行鏈接的時候,當(dāng)它遇到一 個外部函數(shù)的調(diào)用,它會解析這個函數(shù)名,并且到歸檔器建立的目標(biāo)文件庫中去尋找這 個同名函數(shù),并為其安排相同的物理地址。歸檔器除了可以創(chuàng)建庫,也可以對庫進(jìn)行修 改,比如對庫成員進(jìn)行刪除、替換、提取和添加等功能。(5) 運(yùn)行時支持庫運(yùn)行時支持函數(shù)是C/C+編譯器的一個重要組成部分。C/C+用戶經(jīng)常調(diào)用一些標(biāo)準(zhǔn)ANSI 函數(shù)來執(zhí)行一個任務(wù),如動態(tài)內(nèi)存分配、對字符串的操作、數(shù)學(xué)運(yùn)算(如求絕對值、計(jì)算三角函數(shù)和指數(shù)函數(shù)等)以及一些標(biāo)準(zhǔn)的輸入/輸出操作等,這些函數(shù)并不是 C/C+語言的一部分,但是卻像內(nèi)部函數(shù)一樣,只要在源程序中加入對應(yīng)的頭文件(如s

12、tdlib.h、string.h、math.h和stdio.h等)就可以調(diào)用和使用。這些標(biāo)準(zhǔn)的ANSI函數(shù)就是C/C+編譯器的運(yùn)行時支持函數(shù)。C28x的C/C+編譯器所有的運(yùn)行時支持函數(shù),其源代碼均被存放在 一個庫文件rts.src內(nèi),這個源庫文件被C/C+編譯器匯編后可生成運(yùn)行時支持目標(biāo)庫文件。 C28x的C/C+編譯器包含了兩個經(jīng)過編譯的運(yùn)行時支持目標(biāo)文件庫:rts2800.lib和rts2800_ml.lib。前者是標(biāo)準(zhǔn) ANSI C/C+運(yùn)行支持目標(biāo)文件庫,而后者是C/C+大存儲器模式運(yùn)行支持目標(biāo)文件庫,兩者都是由包含在文件rts.src中的源代碼所創(chuàng)建。所謂的大存儲器模式是相對標(biāo)準(zhǔn)存

13、儲器模式而言的,在標(biāo)準(zhǔn)存儲器模式下,C/C+編譯器的缺省地址空間被限制在存儲器的低 64K字,地址指針也是16位。而C28x編譯器支持超過16位的地 址空間的尋址,這需要采用大存儲器模式。在此模式下,C/C+編譯器被強(qiáng)制認(rèn)為地址空間是22位的,地址指針也是22位的,因此28x全部22位地址空間均可被訪問。在 rts2800.lib 和rts2800_m1.lib中,除了標(biāo)準(zhǔn)的 ANSI C/C+運(yùn)行時支持函數(shù)外,還包含一個系統(tǒng)啟動子 程序_c_i ntOO。運(yùn)行時支持目標(biāo)文件庫作為鏈接器的輸入,必須與用戶程序一起被鏈接, 才可以生成正確的可執(zhí)行代碼。(6) 庫建立程序C28x的C/C+編譯器允

14、許用戶對標(biāo)準(zhǔn)的運(yùn)行時支持函數(shù)進(jìn)行查看和修改,也可以創(chuàng) 建自己的運(yùn)行時支持庫,這通過歸檔器或建庫器來完成。比如,用戶可以利用歸檔器從 rts.src中提取某個運(yùn)行時支持函數(shù)的源代碼進(jìn)行修改,然后調(diào)用編譯器對其進(jìn)行編譯和匯 編,最后再利用歸檔器將匯編后的目標(biāo)文件寫入運(yùn)行時支持目標(biāo)庫(如rts2800ib)中。按照同樣的步驟,用戶也可以創(chuàng)建新的運(yùn)行時支持庫。不過,通過建庫器來創(chuàng)建新的運(yùn)行 時支持庫有時更加方便和靈活。比如,編譯器的不同配置條件和編譯選項(xiàng)有時會對生成 的運(yùn)行時支持庫有影響,不同條件下生成的運(yùn)行時支持庫未必能完全兼容,此時為了建 立合適自己的運(yùn)行時支持庫,經(jīng)常不需要改變源代碼,而僅僅是修

15、改編譯器的配置和選 項(xiàng),這樣在使用建庫器時就更加方便了。(7) HEX 轉(zhuǎn)換程序用戶程序經(jīng)過C28x的編譯器和鏈接器生成可執(zhí)行的COFF文件,可以將該文件下載到目標(biāo)系統(tǒng)的SRAM中運(yùn)行和調(diào)試,或直接燒寫到DSP的片內(nèi)Flash或者片外可編程EPROM中。CCS提供一個Flash燒寫程序,該程序接受標(biāo)準(zhǔn)COFF格式的可執(zhí)行文件并通過 JTAG仿真器實(shí)現(xiàn)對DSP片內(nèi)Flash的編程。不過要將程序?qū)懭肫饪删幊蘀PROM中,則在一般情況下需要采用通用編程器來進(jìn)行。盡管COFF這種格式非常有利于模塊化編程以及提供了強(qiáng)大和靈活的管理代碼段和目標(biāo)內(nèi)存的能力,但是大多數(shù)的EPROM編程器并不能識別這種格式,

16、因此CCS提供HEX轉(zhuǎn)換程序,用于把 COFF目標(biāo)文件轉(zhuǎn)換成可被通用EPROM編程器識別的16進(jìn)制目標(biāo)文件格式。HEX轉(zhuǎn)換程序還可以被用于其他需要將COFF文件轉(zhuǎn)換為16進(jìn)制目標(biāo)文件的場合,如調(diào)試器和上電引導(dǎo)加載(Bootloader)應(yīng)用。(8) 絕對列表器和交叉引用列表器絕對列表器 (Absolute Lister) 和交叉引用列表器 (Cross-Reference Lister) 均為調(diào)試工具, 其中絕對列表器接受鏈接后的目標(biāo)文件作為輸入,生成一些列表文件(擴(kuò)展名為.abs),這些文件列舉了鏈接后的目標(biāo)代碼的絕對地址,這個工作如果采用手工來完成,那將需要 很多操作,是非常煩瑣的,絕對列

17、表器可以幫助自動完成這個工作。交叉引用列表器也 接受鏈接后的目標(biāo)文件作為輸入,生成一些交叉引用列表文件(擴(kuò)展名為 .xrf) ,這些列表文件中列舉了所有的符號名、它們的定義以及在被鏈接的源文件中的引用位置。(9) C+ 名稱復(fù)原程序一個C+源程序中的函數(shù),在編譯過程中其函數(shù)名會被編譯器修改成鏈接層的名稱, 當(dāng)用戶直接查看編譯器生成的匯編語言文件時,往往不能將其和源文件中的名稱對應(yīng)起 來,此時借助C+名稱復(fù)原程序(C+ Name Demangling Utility),則可以將修改后的名稱 復(fù)原成源文件中的名稱。(10) 調(diào)試器除了提供代碼生成的功能,CCS的另外一個重要的功能就是在線調(diào)試。CC

18、S可以將鏈接生成的可執(zhí)行的COFF文件通過JTAG仿真器下載到目標(biāo)系統(tǒng)的 RAM中運(yùn)行,通過調(diào)試 器(Debugger)來控制程序的運(yùn)行。CCS的調(diào)試器提供了豐富的調(diào)試功能以幫助用戶對其程 序進(jìn)行調(diào)試和修改。這些調(diào)試功能包括單步運(yùn)行、設(shè)置斷點(diǎn)、變量跟蹤、查看寄存器和 存儲器內(nèi)容、反匯編等基本功能;另外還有一些高級功能,如圖形工具(Graphic Tool) 和探測點(diǎn)(Probe Point)工具。CCS調(diào)試器的圖形工具,可以對保存在連續(xù)存儲器區(qū)域的數(shù)據(jù) 進(jìn)行繪圖處理。使用探測點(diǎn)工具可實(shí)現(xiàn)程序調(diào)試過程中數(shù)據(jù)的導(dǎo)入和導(dǎo)出,當(dāng)遇到探測 點(diǎn)時,可設(shè)定從PC機(jī)將某原始數(shù)據(jù)文件導(dǎo)入到 DSP的相應(yīng)存儲器,

19、或者將存儲器中的數(shù) 據(jù)處理結(jié)果存儲成某一個文本文件。利用探測點(diǎn)工具和斷點(diǎn)工具配合可及時更新顯示圖 形和動畫。(11) GEL 語言CCS還提供了一種 GEL 語言。GEL(General Extension Language,通用擴(kuò)展語言)是一 種類似于C語言的解釋性語言,它被用來創(chuàng)建 GEL函數(shù),以擴(kuò)展CCS的功能和用途。GEL 是C語言的一個子集,即其語法結(jié)構(gòu)遵從標(biāo)準(zhǔn)C的規(guī)定,不過它不能定義和聲明變量,所有的變量必須在DSP的源程序中被定義。被用戶創(chuàng)建的GEL函數(shù)及其參數(shù)可用于對這些DSP源程序中定義的變量進(jìn)行操作,比如進(jìn)行賦值以及運(yùn)算等。GEL函數(shù)的這個作用對于用戶執(zhí)行一個調(diào)試任務(wù)非常有

20、用。例如,用戶在調(diào)試程序時經(jīng)常需要在線修改一個變量 的值以測試程序的運(yùn)行是否正常,如果在源程序里對這個變量進(jìn)行賦值,則每次都要停 止當(dāng)前調(diào)試,修改變量值,然后對源程序重新進(jìn)行編譯、鏈接和下載,顯然這種方法對 于調(diào)試工作非常不利。采用 GEL函數(shù)則可靈活實(shí)現(xiàn)上述調(diào)試任務(wù),當(dāng)用戶在調(diào)試中需要 修改變量值的時候,不用停止當(dāng)前調(diào)試,只要編寫一個GEL函數(shù)并運(yùn)行(該函數(shù)實(shí)現(xiàn)對變量的賦值操作),即可完成修改操作,然后可繼續(xù)執(zhí)行用戶后面的調(diào)試任務(wù)。GEL函數(shù)還可以用來在調(diào)試狀態(tài)下動態(tài)控制和修改目標(biāo)系統(tǒng)的配置 (如對目標(biāo)系統(tǒng)進(jìn)行復(fù)位、禁止或 使能看門狗、配置CPU時鐘以及修改其各種外設(shè)的配置等 ),這使用戶對

21、程序的調(diào)試工作 變得更容易。另外, GEL函數(shù)可以用于創(chuàng)建不同風(fēng)格的輸出窗口,并且在窗口內(nèi)顯示變 量的內(nèi)容。通過GEL函數(shù)用戶能夠在調(diào)試中訪問存儲器,創(chuàng)建輸出窗口并顯示寄存器、 變量或者存儲器的內(nèi)容等。GEL函數(shù)可在任何能鍵入 C表達(dá)式的地方調(diào)用,既可以在對話框中調(diào)用,也可以在其 他GEL函數(shù)中被調(diào)用。通常,GEL函數(shù)可被寫到一個 GEL文件(擴(kuò)展名.gel)中,然后利用CCS的GEL文件載入功能將其加載到 CCS環(huán)境中,在加載的過程中,該GEL函數(shù)會被執(zhí)行。 GEL函數(shù)還可以被直接鍵入一個 GEL命令窗口(在CCS的View菜單下打開GEL工具條即可 顯示該窗口),然后點(diǎn)擊執(zhí)行。對于 F28

22、12 DSP,TI提供了一個專門的GEL文件f2812.gel, 這個GEL文件中包含一個Startup()函數(shù),每當(dāng)CCS啟動的時候,Startup()內(nèi)定義的其他 GEL函數(shù)會被自動執(zhí)行。f2812.gel可被添加到一個工程文件中或者通過CCS的配置工具被指定,運(yùn)行它的結(jié)果是在 CCS的GEL菜單下添加一系列的菜單命令 (也即一系列的GEL函 數(shù) ),用戶可以通過鼠標(biāo)來選擇執(zhí)行這些菜單命令。(12)DSP/BIOSCCS中還集成了一個嵌入式實(shí)時多任務(wù)操作系統(tǒng)內(nèi)核DSP/BIOS。它為用戶提供了更加便捷和面向?qū)ο蟮能浖_發(fā)途徑, 用戶可以基于此操作系統(tǒng)內(nèi)核開發(fā)自己的嵌入式 DSP 程序。DS

23、P/BIOS具備一般操作系統(tǒng)的重要特征。例如,具有優(yōu)先級別的多線程及任務(wù)調(diào) 度、存儲器管理、基于管道、流或消息隊(duì)列模型的線程間的通信和同步化,硬件抽象化 和設(shè)備驅(qū)動以及程序的實(shí)時監(jiān)測和分析等。DSP/BIOS由三個重要部分組成:應(yīng)用程序接口 (API)、對象配置工具以及實(shí)時分析工具(Real-Time Analysis T ool)。API是DSP/BIOS的核心,用戶程序通過調(diào)用API來使用DSP/BIOS。DSP/BIOS的API被分成許多對象模塊,用戶可以根據(jù)自己的需要選擇性地使用這些模塊,從而實(shí)現(xiàn)對DSP/BIOS尺寸的裁剪和定制。DSP/BIOS的對象配置工具主要用于靜態(tài)創(chuàng)建 API

24、對象并設(shè)置其屬性,創(chuàng)建的 API對象 將被用戶程序調(diào)用。靜態(tài) API對象在程序運(yùn)行期間都是存在的,不能在運(yùn)行時被刪除;當(dāng) 然,API對象也可以在運(yùn)行時被動態(tài)創(chuàng)建和刪除。靜態(tài)創(chuàng)建API對象可以減小用戶代碼的長度,也可以減少動態(tài)創(chuàng)建對象的時間開銷,不影響用戶程序的實(shí)時性。此外,只有靜態(tài) 創(chuàng)建的API對象其運(yùn)行特性能夠被實(shí)時分析工具監(jiān)測。DSP/BIOS的實(shí)時分析工具采用可視化的方法對目標(biāo)系統(tǒng)中用戶程序的運(yùn)行情況進(jìn)行實(shí)時監(jiān)測,這包括程序的跟蹤(顯示程序運(yùn)行中發(fā)生的各種事件、被執(zhí)行的進(jìn)程及其動態(tài)變化 )、性能監(jiān)控 (統(tǒng)計(jì)目標(biāo)系統(tǒng)的資源 消耗,如CPU的負(fù)荷和時間開銷 卜數(shù)據(jù)流記錄(將目標(biāo)系統(tǒng)駐留的I/

25、O對象的數(shù)據(jù)流記錄 到PC機(jī)的文件中)。與傳統(tǒng)的調(diào)試工具不同,DSP/BIOS的實(shí)時分析工具利用 API對象,在程序運(yùn)行過程中采集數(shù)據(jù)并上傳到PC機(jī),該工具對用戶程序的實(shí)時性幾乎沒有影響;而傳統(tǒng)的調(diào)試工具需要暫停程序的運(yùn)行,然后收集寄存器或變量內(nèi)容等信息進(jìn)行上傳。4.2 集成開發(fā)環(huán)境 CCSTI DSP的集成開發(fā)環(huán)境為 CCS(Code Composer Studio,代碼創(chuàng)作者工作室 ),有CCS v2.2、CCS v3.3等版本。CCS具有可視化的代碼編輯界面,可以直接編輯C語言、匯編語言源文件、頭文件和鏈接命令文件等。它集成了代碼生成工具,包括編輯器、編譯器和 鏈接器等。具有強(qiáng)大的調(diào)試能

26、力,可以查看寄存器值、跟蹤和顯示變量值、設(shè)置斷點(diǎn)與121探測點(diǎn)以及顯示波形與圖形等。1.軟件安裝與設(shè)置下面以北京瑞泰創(chuàng)新科技公司的ICETEK -5100 USB接口仿真器為例,說明 CCS v2.2軟件的安裝與設(shè)置。(1) 雙擊CCS2000.exe文件。將壓縮文件展開,默認(rèn)的路徑為 c:temp。在安裝過程中安裝軟件會提示用戶設(shè)置安裝路徑,可任意設(shè)一個安裝路徑,例如d:ti。安裝完畢后在桌面會出現(xiàn)兩個圖標(biāo),一個是 CCS2 (C2000),另一個是Setup CCS2 (C2000)。(2) 雙擊驅(qū)動文件usbdrv28x.exe進(jìn)行驅(qū)動程序的安裝。在安裝過程中安裝軟件會提示用戶設(shè)置安裝路

27、徑。注意,此時選擇安裝路徑應(yīng)與CCS樣,例如本例為d:ti。(3) 將仿真器的USB電纜插入計(jì)算機(jī)USB接口,計(jì)算機(jī)會自動搜索到新的USB設(shè)備。新硬件向?qū)啻卧儐栍脩粼谀睦镎业津?qū)動程序,用戶在提示路徑填入d:tiICETEK即可。(4) 在驅(qū)動程序安裝好后,雙擊 Setup CCS2 '(C2000)圖標(biāo),進(jìn)行軟件設(shè)置。如果是第1次設(shè)置,可以先關(guān)掉彈出的窗口,并刪除My System列表下的原有配置。單擊右側(cè)的菜單Import a Configuration File,在 列表框 中選擇 ICETEK-5100 USB Emulator forTMS320F2812并單擊Import

28、,再單擊Save and quit,即可實(shí)現(xiàn)硬件仿真器(Emulator)配置。 如果在列表框中選擇 F2812 Device Simulator,還可以配置軟件仿真器(Simulator)。(5) 可以測試CCS硬件仿真軟件安裝是否正確。將仿真器的14引腳JTAG仿真插頭連接到用戶目標(biāo)板上,仿真器的USB 口接到計(jì)算機(jī),接通 +5V電源。單擊CC2( C2000),如果軟件安裝成功,則計(jì)算機(jī)屏幕上會出現(xiàn)圖4-3所示畫面。圖4-3 CCS運(yùn)行主窗口(6) 安裝固化Flash用的插件。單擊 C2000-2.00-SA-to-TI-FLASH2x.EXE 文件,該文件 會自動尋找安裝路徑,并自行安

29、裝。如果安裝成功,則在CCS2.2軟件的Tools菜單下會增加一個F28xx On-Chip Flash Programmer下拉菜單命令。用戶可以通過該命令將設(shè)計(jì)調(diào)試 好的.out程序燒寫到目標(biāo)板,該板即可脫離仿真器運(yùn)行。2. CCS主要菜單與功能典型的CCS運(yùn)行界面如圖4 4所示°CCS的功能可以通過菜單或工具條按鈕實(shí)現(xiàn)。主要的菜單項(xiàng)有F ile、Edit、View、Project、Debu g等。這些菜單的使用與常用的集成開發(fā) 軟件Visual C+等使用方法基本一樣。圖4-4典型CCS運(yùn)行界面(l)File 菜單File(文件)菜單用于文件管理,裝載可執(zhí)行程序及符號與數(shù)據(jù),執(zhí)

30、行文件的輸入/輸 出功能等。F ile菜單的命令如表4 1所示。表4 1 File菜單的命令WavFib翳理1“卜1|丈4 t鷲曲甲膚乩 曲4片叱需)KFiB&XCcrfig新逢一叫口淚JBW di豊卞忡y骼血f R比中JJ 砂川5詢R.阿卯:片導(dǎo)Levi FtrgriM«C0FF<曲)立申M血斜0希號加畫目刪養(yǎng)曲目蘇 農(nóng)Xrn葉at >Afrtn;: 'L7F 工件 tTJ.+.UL<? 如St丹號記Laid堀PC龍半中瞼掛頂現(xiàn)目蘇”可遊宣耐ROmtUJ國Ei.ccfFivti一#匚吏曲遼:特目舷7聞尊矗心nt劉 rJttsxaLgiiWcWf1?

31、-N 史 Wudd卜業(yè):皀esrmniia mxftaa, to國-電L£ 弄刮 卓、文怦i慎比,當(dāng)it的工崔芒.亜用ft-,平同總hl*忑二腔Nfab 110朋則旺 馬立萍和且揉D6P玄用靜HffiflS. FiU芍臥缺 z片松 陽時帯客訴謂試!(衽間可從TC立件牛耳呼*土歎.lit a r 二;g 心;|:;脣; r .,:爲(wèi)(2)View 菜單View(查看)菜單用于工具條的顯示控制,DSP的存儲器、寄存器內(nèi)容查看,以及對存儲器區(qū)域進(jìn)行繪圖顯示等°View菜單的命令如表42所示。表42 View菜單命令功琵Dis-Assembly當(dāng)岳建序加戰(zhàn)人目抵按廂CCS捋自動打幵

32、一牛廢匯騙宙口-度i匚彌 窗口很據(jù)存雌焉的內(nèi)容昱眾度擅令和調(diào)誡所需的舟號僧息.Mesnojy顯示指定存儲樹氏1容CPUCPU Register鈿DSP的舒存器內(nèi)容RegisteisPeiiphBiB Re 舒顯示外設(shè)寄存據(jù)內(nèi)蓉.SunulalQT不支捋此功程Graphm間顏率圉形)在時戴或頻域顯示信號渡蕨頻或分析時將劉數(shù)括進(jìn)疔FFT曼換,時 域分析時數(shù)據(jù)無須進(jìn)疔預(yù)址理-顯示緩沖的尢小由Dispity Data Size 定義Coietellalioii(星座團(tuán)形使用星座51巫示倍號讖刑-輸入倍號帔分懈為X、丁兩T廿墾采用 宙累京坐標(biāo)鵲示渡那顯示線中的大T白CoMtellaliDt Points

33、定義Eye: 【眼ED使用睨圉乘星化倚號決史度.在定的宣示詁圍內(nèi)箱天信導(dǎo)被連陵 垂加并旻示為目fill)的電狀I(lǐng)mage (使用li陞來曲試圖像址理算眩.團(tuán)橡數(shù)狂基于RGB和HJV數(shù)弱Watch Window用來檢奩和竦輯吏蚩或c表達(dá)式町以以不阿S式顯示吏壘恒,還町 顯示數(shù)蛆、皓啊指針等赳含多牛元累的張雖ProjectCCS啟動后將自動打開工程視虱 在工程祖凰中空件按苴性質(zhì)甘資 源文件、頭立件,障空件駁命脅立祥Mhffid Sburcif/Asiti同時顯示C代碼爾聯(lián)的反匯編代碼c恆于c代碼話)(3)roject 菜單Project(工程)菜單用于工程管理,包括創(chuàng)建、打開和關(guān)閉工程,在工程中添

34、加和刪 除文件,以及對工程進(jìn)行編譯和鏈接,對編譯器和鏈接器進(jìn)行配置等.Project菜單的命 令如表4 3所示。表4一3 Project菜單命令菜單命令功能Add Files to ProjectCCS根據(jù)文件的擴(kuò)展名將文件添加到工程的相應(yīng)子目錄中。工程 中支持C源文件(.c*)、匯編源文件(.a*、.s*)、庫文件(.o*, .lib)、頭 文件(.h)和鏈接命令文件(.cmd)。其中C和匯編源文件可被編譯和 鏈接,庫文件和鏈接命令文件只能被鏈接,頭文件會被CCS自動添加到工程中Compile File對C或匯編源文件進(jìn)行編譯Build編譯和鏈接。對于沒有修改的源文件,CCS不重新編譯Reb

35、uild All對工程中所有文件重新編譯和鏈接,生成輸岀文件Stop Build停止正在建立的進(jìn)程Show DependenciesScan All Dependencies為了判別哪些文件應(yīng)重新編譯,CCS在Build 一個程序時會生成一 棵關(guān)系樹(Dependency Tree)以判別工程中各文件的依賴關(guān)系。使 用這兩個菜單命令則可以觀察工程的關(guān)系樹Build Options用來設(shè)定編譯器、匯編器和鏈接器的參數(shù)Recent Project Files加載最近打開的工程文件(4) Debu g 菜單 Debug(調(diào)試)菜單用于執(zhí)行調(diào)試功能,如運(yùn)行、設(shè)置斷點(diǎn)、設(shè)置探測點(diǎn)、單步執(zhí)行等。Debu

36、g菜單的命令如表4 4所示。 表4 4 Debug菜單命令菓樂命令Breahpciuts斷點(diǎn).程序在執(zhí)行到斷點(diǎn)時需停止運(yùn)行.Step Inlo單歩運(yùn)行-如果運(yùn)行到調(diào)用函數(shù)處痛裁入函數(shù)單步執(zhí)廳Step Ovbi執(zhí)行一條c獵令或?匚編捋呀.與Skpinin不同的是尙保護(hù)處理器肺水線> i謝豁后的若千來取遲分軸調(diào)用將同時植執(zhí)疔Step OilJ1D果程序運(yùn)行在一亍子程序中飆右Step Out將便程序執(zhí)打完該子程序后回釗 凋用跡函數(shù)的地方.Run叢當(dāng)前程序詫數(shù)器PC)執(zhí)行程序碰到斷點(diǎn)時程序背悖執(zhí)行Halt中止程序運(yùn)行AnimAts適行程序-碰到斷點(diǎn)時遅序習(xí)停運(yùn)行更新羔與枉何Fiobe Point

37、相關(guān)聯(lián)的宙 后程厚繾續(xù)運(yùn)疔.Run Free繳略所有斷點(diǎn)(包括Probe Powt和Profile Point) 從當(dāng)前PC處幵舞執(zhí)行程 序.止1命令S Shnulatoi下無效Run to Cursor執(zhí)行車胱標(biāo)處,光標(biāo)所在行必須為有效代碼行Multiple Opemtion設(shè)適單步扶行的次數(shù)Reset DSP復(fù)應(yīng)DSP ,初抽化朋有寄存船到蔑上電狀譽(yù)并中止程序運(yùn)行Restart將FC值恢復(fù)到程序的人口.此傭轡并不開奶程序的執(zhí)行Go Main在測的峭材號處設(shè)置一個臨時斯點(diǎn)此酣轡在調(diào)試C理序時起作用3. 采用CS開發(fā)應(yīng)用程序的步驟利用CCS集成開發(fā)環(huán)境,用戶可以完成工程的創(chuàng)建、應(yīng)用程序的代碼編

38、輯、編譯、 鏈接及數(shù)據(jù)分析等工作。采用CCS開發(fā)應(yīng)用程序的一般步驟為:(1) 用Project菜單創(chuàng)建或打開一個工程。工程用于管理用戶的各種文件。(2) 編輯源程序(.c, .asm)、鏈接命令(.cmd)、頭文件等文件(.h),并將它們添加到該工 程中。(3) 對于C語言程序,需要添加標(biāo)準(zhǔn)運(yùn)行時支持庫文件rts2800ib ,大存儲器模式下運(yùn)行時支持庫文件為rts2800_ml.lib。(4) 編譯、匯編、鏈接程序。如果有語法或鏈接錯誤,將在信息顯示窗口顯示出來。 可以根據(jù)顯示的信息定位錯誤位置,并改正錯誤。(5) 排除語法和鏈接錯誤后,CCS將生成可執(zhí)行文件(.out)。可以通過菜單Fil

39、e>Load Program將可執(zhí)行程序裝載到目標(biāo)系統(tǒng)的存儲器中運(yùn)行調(diào)試。CCS的程序調(diào)試功能有:(1) 連續(xù)運(yùn)行(Run)與暫停(Halt),運(yùn)行到光標(biāo)位置。(2) 單步(Step)運(yùn)行。(3) 設(shè)置斷點(diǎn)(Break Point)與設(shè)置探測點(diǎn)(Probe Point)。(4) 查看與修改存儲單元。(5) 查看與修改寄存器內(nèi)容。(6) 觀察和編輯變量。(7) 程序動畫 (Animate) 運(yùn)行和數(shù)據(jù)圖形顯示。4.QSP的C工程文件采用CCS平臺,281x DSP的工程文件包括如下文件:(1) CCS工程文件(.pjt)。由CCS自動生成。在 CC(Code Composer)軟件環(huán)境中,

40、工 程文件擴(kuò)展名為 .mak。(2) 源程序文件。包含程序源代碼,可以是匯編語言文件(.asm)或C程序文件(.c),也可以采用二者混合編程。(3) 頭文件(.h)。用于定義片內(nèi)外設(shè)寄存器映射地址,用戶自定義的常量等。例如 頭文件 DSP281x_Adc.h 定義了 ADC 寄存器,頭文件 DSP281x_PieVec.h 定義了 PIE 中斷 矢量,頭文件 DSP281x_GlobalPrototypes.h 對一些函數(shù)進(jìn)行了聲明。(4) 鏈接命令文件(.cmd)。包含鏈接器選項(xiàng)、對程序和數(shù)據(jù)存儲器空間的分配。(5) 庫文件 (.lib) 。提供 ANSI 標(biāo)準(zhǔn) C 運(yùn)行時支持函數(shù)、編譯器公

41、用程序函數(shù)、浮點(diǎn) 運(yùn)行函數(shù)和 C 輸入 /輸出函數(shù)。 C28x 大存儲器模式下的 C 程序運(yùn)行時支持庫文件為 rts2800_ml.lib,標(biāo)準(zhǔn)運(yùn)行支持庫為 rts2800.lib。(6) 目標(biāo)文件(.obj)。由匯編器生成,COFF格式。(7) 可執(zhí)行代碼文件 (*.out) 。由鏈接器生成, COFF 格式。該文件可以裝入到存儲 器進(jìn)行調(diào)試與執(zhí)行。(8) 列表文件 (*.lst) 。匯編器生成的文件。(9) 映射文件(.map)。匯編器生成的變量與符號存儲器地址分配文件。這些文件中,用戶需要編寫源程序文件(.c、.asm卜鏈接命令文件(.cmd)和頭文件(.h)。4.3.1公共目標(biāo)文件格式

42、COFF編譯、匯編與鏈接程序建立的目標(biāo)文件采用共用目標(biāo)文件格式( Common Object File Format, COFF),便于模塊化編程、管理代碼段和存儲器,即不必為程序代碼或變量指定 目標(biāo)地址,這為程序編寫、移植和升級提供了很大方便。匯編器根據(jù)命令用適當(dāng)?shù)亩螌⒏鞑糠殖绦虼a和數(shù)據(jù)連在一起,構(gòu)成目標(biāo)文件。鏈 接器分配存儲單元,即把各個段重新定位到目標(biāo)存儲器中。段(section,也稱為塊)是目標(biāo)文件的最小單位,是在存儲器中占據(jù)連續(xù)空間的代碼和 數(shù)據(jù)塊,各段相互獨(dú)立。匯編器的 COFF 文件格式包括三個默認(rèn)的段:.text 段,即程序段 ,該段通常包含可執(zhí)行代碼即程序。.data段,即

43、數(shù)據(jù)段,該段通常包含已初始化的數(shù)據(jù)。.bss段,即保留數(shù)據(jù)空間段,該段通常為未初始化的數(shù)據(jù)保留空間。圖4-4給出了一個包含.text、.data和.bss段的目標(biāo)文件,也表示出了目標(biāo)文件中的段 與目標(biāo)存儲器之間的關(guān)系。匯編器和鏈接器也允許用戶建立和鏈接自定義的段。所有的段可以分為初始化段和 未初始化段兩類。初始化段包含程序代碼和數(shù)據(jù)。未初始化段則為未初始化的數(shù)據(jù)保留 存儲空間。匯編命令.sect和.usect可以分別用來創(chuàng)建自定義的初始化段和未初始化段。C編譯器對C程序編譯后也產(chǎn)生初始化段和未初始化段兩類,具體的段名稍有不同, 除了不使用.data段之外,還產(chǎn)生一些新的段。C28x的C/C+編

44、譯器產(chǎn)生的兩類基本段的 鏈接分別如表4-5、表4-6所示。表4-5初始化段鏈接段名稱描述限制.text可執(zhí)行代碼和常量程序.cint已初始化的全局與靜態(tài)變量的C初始化記錄低64K數(shù)據(jù).pint全局構(gòu)造器(C+ constructor)表程序.switch實(shí)現(xiàn)switch語句表程序/低64K數(shù)據(jù).const已初始化的全局與靜態(tài) const修飾變量,串常量低64K數(shù)據(jù).econstfar costant 變量數(shù)據(jù)任何位置表4-6未初始化段鏈接段名稱內(nèi)容限制.bss全局與靜態(tài)變量低64K數(shù)據(jù).ebssfar全局與靜態(tài)變量數(shù)據(jù)任何位置.stack堆??臻g低64K數(shù)據(jù).sysmemmalloc函數(shù)存儲區(qū)

45、低64K數(shù)據(jù).esysmemfar malloc函數(shù)存儲區(qū)數(shù)據(jù)任何位置C28x編譯器將存儲器處理為程序存儲器和數(shù)據(jù)存儲器。程序存儲器包含可執(zhí)行代碼、初始化數(shù)據(jù)和開關(guān)表;數(shù)據(jù)存儲器主要包含外部變量、靜態(tài)變量和系統(tǒng)堆棧。鏈接器確 定存儲器地址映射。C編譯器的任務(wù)是產(chǎn)生可重定位的代碼,允許鏈接器將代碼和數(shù)據(jù)定位到合適的存 儲空間。編譯器對C語言編譯后除了生成2個基本段,即.text、.bss外,還生 成.cin it、.pint、.const、.ec on st、.switch、.ebss.、.stack、.sysmem.、.esysmem 段。這些段 可分為初始化段和未初始化段。初始化段包含可執(zhí)行

46、代碼或常數(shù)表。C編譯器產(chǎn)生的初始化段 有.pint、.const、.ec on st、.text、.cin it、.switch 。.text段,包含可執(zhí)行代碼和常量(constant)。.cinit段和.pint段,包含初始化變量和常量。.const段,包含串常量,全局變量、靜態(tài)變量的聲明和初始化。.eco nst段,包含串常量,全局變量、靜態(tài)變量的聲明和初始化。變量由far con st修飾,或用大存儲器模型,初始化后放進(jìn)遠(yuǎn)(far)存儲器。.switch段,包含 switch語句表。未初始化段用于保留存儲器(通常為RAM)空間。C編譯器產(chǎn)生的為初始化段有.bss、.ebss、.stack

47、、.sysmem 禾口 .esysmem 段。.bss段,為全局和靜態(tài)變量保留空間。.ebss段,為全局和靜態(tài)變量保留空間。變量由far修飾,或用大存儲器模型使用。.stack段,為C系統(tǒng)堆棧。用于保護(hù)函數(shù)的返回地址、分配局部變量、調(diào)用函數(shù)時傳 遞參數(shù)。.sysmem段,為動態(tài)存儲器分配保留空間,malloc函數(shù)使用。.esysmem段,為動態(tài)存儲器分配保留空間,far malloc函數(shù)使用。各種段在程序中的映射如表4-7所示。鏈接器從不同的模塊取出每個段并將這些段用同一個名稱聯(lián)合起來產(chǎn)生輸出段。全部的程序就是由這些輸出段組成的??梢愿鶕?jù)需要 將這些輸出段放置到地址空間的任何位置,以滿足系統(tǒng)的

48、要求。.text、.cinit和.switch段通常鏈接到 ROM或RAM中,且必須鏈接到程序存儲器( Page 0 )中。.const/.econst段 可以鏈接到 ROM或RAM中,但必須鏈接到數(shù)據(jù)存儲空間(Page 1)中。.bss/.ebss .stack和.sysmem/.esysmem段必須鏈接到 RAM中,且必須在數(shù)據(jù)存儲器(Page 1)中。表4-7存儲器映射表段(Section)存儲器類型(Type of Memory)頁面(Page).textROM 或 RAM0.cintROM 或 RAM0.pintROM 或 RAM0.switchROM 或 RAM0,1.constR

49、OM 或 RAM1.econstROM 或 RAM1.bssRAM1.ebssRAM1.stackRAM1.sysmemRAM1.esysmemRAM14.3.2 鏈接命令文件CCS的鏈接器可以有很多選項(xiàng),如-1(包含庫文件)、-stack(定義堆棧)、-0(定義輸出文件)等,并且將用戶軟件定義的段與目標(biāo)系統(tǒng)存儲器物理地址對應(yīng)關(guān)系定義清楚。用戶要根據(jù)系統(tǒng)要求編寫鏈接命令文件,并把它添加到工程文件中。鏈接器選項(xiàng)的 實(shí)現(xiàn)通常采用下面兩種方法:(1) 利用工程選項(xiàng)菜單實(shí)現(xiàn)。在CCS菜單Project>Build>Linker頁面中可以對鏈接器選項(xiàng)進(jìn)行設(shè)置。(2) 利用鏈接器命令文件(.c

50、md)實(shí)現(xiàn)。即編寫一個鏈接器命令文件,將所有鏈接器選項(xiàng)寫在文件中,并將此文件加入到工程,這樣CCS在進(jìn)行編譯鏈接時,會自動按照鏈接器命令文件中的選項(xiàng)進(jìn)行。有兩條鏈接器命令 MEMORY和SECTIONS可以實(shí)現(xiàn)對程序存儲器和數(shù)據(jù)存儲器空 間的分配。MEMORY命令定義目標(biāo)存儲器的配置,SECTIONS命令定義編程段與目標(biāo)存儲器的關(guān)系。1. MEMORY 命令MEMORY命令定義目標(biāo)系統(tǒng)中可以使用的存儲器范圍,每個存儲器范圍具有名字、 起始地址和長度。一般形式為MEMORYPAGE 0: name: origin=constant, length=constant;PAGE n : name:

51、origin=constant, length=constant;PAGE n:定義存儲器空間。n=0254.通常PAGE 0定義程序存儲器,PAGE 1定義數(shù)據(jù)存儲器。name:存儲器范圍名字??梢允?18個字符。origin或簡寫為o:存儲器范圍的起始地址。length或簡寫為I:存儲器范圍的長度。2. SECTIONS 命令SECTIONS命令用于將輸出各段定位到所定義的存儲器。一般形式為SECTIONSname: property, property,.name: property, property,.在段名之后是是特性列表,定義段的內(nèi)容以及是怎樣分配的。段可能的特性是裝載 位置、運(yùn)

52、行位置、輸入段、段類型等。通常的屬性符號“>”表示輸出段裝載位置。例 4-1 鏈接命令文件 1 。a.obj b.ob c.obj-o prog.out/*輸入被鏈接的文件名 */*選擇輸出的可執(zhí)行文件名 prog.out*/-m prog.map/* 選擇 map 文件名 prog.map*/-l rts2800.libMEMORY/* 鏈接運(yùn)行時支持庫 */* MEMORY 命令 */RAM: origin=100h length=100h/*RAM 存儲器的起始地址與長度 */ROM: origin=1000h length=100h/*ROM 存儲器的起始地址與長度 */SECT

53、IONS /*SECTIONS 命令 */.text:>ROM/* 將 .text 段分配到ROM*/.data:>ROM/*將.data段分配到ROM*/.bss:>RAM/*將.bss段分配到RAM*/.pint:>ROM/*將.pint段等分配到對應(yīng)的存儲器*/.cint:>ROM.switch:>ROM.const:>RAM.stack:>RAM.sysmem: >RAM例4-2鏈接命令文件2。該例鏈接命令文件分為兩個,一個是用于DSP281X片內(nèi)外設(shè)寄存器連接的命令文件 DSP281x_Headers_nonBIOS.cmd。另一

54、個是用于C程序默認(rèn)段鏈接 的文件: F2812_EzDSP_RAM_lnk.cmd 。/文件: DSP281x_Headers_nonBIOS.cmd, 功能: DSP281x 外設(shè)寄存器鏈接命令文件鏈接器cmd文件將在頭文件中定義的外設(shè)結(jié)構(gòu)體分配到正確的存儲器映射空間在不使用DSP/BIOS時,該鏈接文件包含外設(shè)中斷向量表PieVectorTable如果使用DSP/BIOS,則不包含外設(shè)中斷向量表PieVectorTable133#MEMORYPAGE 0: /*PAGE 1: /*DEV_EMU程序存儲空間 */ 數(shù)據(jù)存儲空間 */: origin = 0x000880, length =

55、 0x000180/*器件仿真寄存器*/#PIE_VECT: originFLASH_REGS: originCSM:originXINTF:originCPU_TIMER0:originPIE_CTRL:originECANA:originECANA_LAM:originECANA_MOTS:originECANA_MOTO:originECANA_MBOX:originSYSTEM:originSPIA:originSCIA:originXINTRUPT:originGPIOMUX:originGPIODAT:originADC:originEVA:originEVB:originSCIB:originM

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論