《TMS320C3X系列-DSP原理與開發(fā)技術(shù)》課件第7章_第1頁
《TMS320C3X系列-DSP原理與開發(fā)技術(shù)》課件第7章_第2頁
《TMS320C3X系列-DSP原理與開發(fā)技術(shù)》課件第7章_第3頁
《TMS320C3X系列-DSP原理與開發(fā)技術(shù)》課件第7章_第4頁
《TMS320C3X系列-DSP原理與開發(fā)技術(shù)》課件第7章_第5頁
已閱讀5頁,還剩170頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第7章開發(fā)工具與集成開發(fā)環(huán)境

7.1引言7.2代碼生成工具7.3代碼調(diào)試工具7.4CC集成開發(fā)環(huán)境本章小結(jié)

思考題與習(xí)題

7.1引

可編程DSP芯片的開發(fā)需要一整套完整的軟硬件開發(fā)工具。通常,DSP芯片的開發(fā)工具可以分為代碼生成工具和代碼調(diào)試工具兩大類。代碼生成工具的作用是將用C語言或匯編語言編寫的DSP程序編譯匯編并鏈接成為可執(zhí)行的DSP程序。代碼調(diào)試工具的作用則是對DSP程序及系統(tǒng)進(jìn)行調(diào)試,使之能夠達(dá)到設(shè)計(jì)目標(biāo)。本章分別介紹TI公司的這兩類開發(fā)工具,并介紹它們的使用方法。之后介紹CC集成開發(fā)環(huán)境的程序設(shè)計(jì)方法,對初學(xué)者來說,可以很好地在此指導(dǎo)下使用這些工具和設(shè)計(jì)方法。7.2代碼生成工具

7.2.1代碼生成工具程序

代碼生成工具程序主要包括以下幾種類型的程序:①C編譯器;②匯編器和鏈接器;③輔助程序,如文檔管理程序和代碼格式轉(zhuǎn)換程序等;④庫文件;⑤RTS(Runtime-Support)頭文件。為了對代碼生成工具有一個(gè)全面的了解,在這里我們給出了浮點(diǎn)DSP芯片的代碼生成工具。TMS320C3x/C4xV4.50版本的代碼生成程序包主要包括如下文件:(1)?CL30.EXE——一步編譯匯編鏈接程序;(2)?AC30.EXE——文法分析程序;(3)?OPT.EXE——優(yōu)化程序;(4)?CG30.EXE——代碼生成程序;(5)?AR30.EXE——文檔管理程序;(6)?MK30.EXE——庫生成程序;(7)?ASM30.EXE——匯編應(yīng)用程序;(8)?CLIST.EXE——交叉列表程序;(9)

LNK30.EXE——鏈接程序;(10)

ROM30.EXE——代碼格式轉(zhuǎn)換程序。庫文件包括:(1)?RTS30.LIB——TMS320C3x運(yùn)行支持庫;(2)?RTS40.LIB——TMS320C4x運(yùn)行支持庫;(3)?RTS.SRC——源碼運(yùn)行支持庫。

TMS320C3x/C4x浮點(diǎn)C編譯器的RTS頭文件共有12個(gè):

ASSERT.H——定義在程序運(yùn)行時(shí)插入失敗診斷信息的assert宏。

LIMITS.H——定義一些數(shù)值表示的極值。

STDDEF.H——定義了兩個(gè)宏和兩個(gè)類型,為多個(gè)運(yùn)行支持函數(shù)所使用。

CTYPE.H——定義了字符測試和轉(zhuǎn)換的函數(shù)。

MATH.H——定義三角、指數(shù)、雙曲等數(shù)學(xué)函數(shù)。這些函數(shù)的輸入值和返回值均為

double類型。除非明確表示,否則所有三角函數(shù)均用弧度為單位。

STDLIB.H——說明了多個(gè)函數(shù)、宏和數(shù)據(jù)類型。如求絕對值函數(shù)abs()和labs()、除法函數(shù)div()和ldiv()等。此外,還說明了一些常用的庫函數(shù),如字符串轉(zhuǎn)換、偽隨機(jī)序列產(chǎn)生、程序退出等函數(shù)。

ERRNO.H——如果數(shù)學(xué)函數(shù)的輸入?yún)?shù)是一個(gè)無效的參數(shù)值或函數(shù)返回有一個(gè)超過定義范圍的結(jié)果,則發(fā)生錯(cuò)誤。在這種情況下,一個(gè)名為ermo的變量被設(shè)置為下列兩個(gè)宏之一的值:

EDOM域錯(cuò)誤(無效參數(shù))

ERANGE范圍錯(cuò)誤(無效結(jié)果)調(diào)用數(shù)學(xué)函數(shù)的C代碼可以讀到errno的值以檢查錯(cuò)誤條件。errno變量在errno.h中說明,在errno.c中定義。

STDARG.H——有些函數(shù)具有數(shù)目可變和類型不同的參數(shù),即所謂的變參數(shù)函數(shù)。stdarg.h頭文件說明了使用變參數(shù)函數(shù)的宏和類型。

STRING.H——說明了可進(jìn)行字符串操作的標(biāo)準(zhǔn)函數(shù)。如移動(dòng)或復(fù)制整個(gè)或部分字符串、字符串比較、在字符串中搜索字符和確定一個(gè)字符串的長度等。

FLOAT.H——定義了一些數(shù)值表示參數(shù)。

SETJMP.H——定義了繞過正常函數(shù)調(diào)用和返回規(guī)則的類型、宏和函數(shù)。

TIME.H——說明了可進(jìn)行日期和時(shí)間操作的宏、數(shù)據(jù)類型和函數(shù)。如clock()和time()等。7.2.2宏匯編器和鏈接器

TMS320宏匯編器和鏈接器是一種將匯編語言源文件轉(zhuǎn)化為可執(zhí)行目標(biāo)代碼的代碼生成工具。其主要特點(diǎn)包括:

(1)宏和庫函數(shù)支持;

(2)允許條件編譯;

(3)支持可重定位模塊;

(4)具有完整的錯(cuò)誤診斷功能;

(5)符號表和交叉參考。匯編器的作用是將匯編語言源文件編譯為機(jī)器語言目標(biāo)文件。源文件可以包含指令、匯編器命令和宏命令。匯編器命令控制匯編過程的各個(gè)方面,如源列表格式、符號定義以及源代碼在塊(section)中的放置等。鏈接器的作用是將目標(biāo)文件組合成一個(gè)可執(zhí)行的目標(biāo)模塊。在生成可執(zhí)行模塊的過程中,鏈接器進(jìn)行重定位操作并處理外部引用符號。鏈接器輸入的文件采用COFF目標(biāo)文件格式。鏈接器的主要功能包括:(1)定義一個(gè)與目標(biāo)系統(tǒng)存儲(chǔ)器相符的存儲(chǔ)器模式;(2)組合目標(biāo)文件塊;(3)將塊分配到指定的存儲(chǔ)器區(qū)域;(4)定義和重定義全局符號以分配特定的值;(5)重定位塊以分配最終的地址;(6)處理輸入文件之間的未定義外部符號。7.2.3C編譯器

C編譯器是一種C語言程序自動(dòng)編譯為DSP匯編程序的代碼生成工具。TI對其生產(chǎn)的各類DSP芯片都提供了相應(yīng)的C編譯軟件工具程序。C編譯器為開發(fā)DSP芯片提供了一種極為便利的軟件開發(fā)手段。

TI公司開發(fā)的DSP芯片C編譯器提供了符合ANSI標(biāo)準(zhǔn)的運(yùn)行支持庫,而且可以一步將程序從C源程序編譯為目標(biāo)代碼文件,這種目標(biāo)代碼可以進(jìn)行重定位,經(jīng)鏈接之后就可以形成最終的目標(biāo)代碼。具體的內(nèi)容可參考第7章的ANSIC編譯器內(nèi)容。7.2.4文檔管理器和庫生成器

TMS320定點(diǎn)和浮點(diǎn)代碼生成程序包中分別提供了dspar.exe和ar30.exe兩個(gè)文檔管理程序。文檔管理程序的主要作用是將多個(gè)獨(dú)立文件組合成一個(gè)文檔(archive)或庫(library)。用文檔管理器可以生成不同類型的庫,例如,可以用文檔管理器生成匯編器所需的源文件庫;方法是首先編寫好多個(gè)源文件,然后用文檔管理器將它們組合成一個(gè)源文件庫。也可以用文檔管理器生成鏈接器所需的目標(biāo)文件庫,方法是在編寫好各個(gè)源文件之后,用匯編器對各個(gè)源文件進(jìn)行匯編,然后用文檔管理器將目標(biāo)文件組合成一個(gè)目標(biāo)文件庫,鏈接時(shí)可以指定目標(biāo)文件作為鏈接器的輸入。除了可以將多個(gè)文件組合成一個(gè)庫之外,文檔管理器還可以對已有的庫進(jìn)行其他操作。例如,可以對已有的庫進(jìn)行文件添加、文件刪除、文件替換和文件提取,也可以列出庫內(nèi)所有的文件。dspar和ar30提供的命令和使用方法完全相同,常用選項(xiàng)命令有:文件添加命令?-a,文件刪除命令?-d,文件替換命令?-r,列出庫中文件命令?-t,文件提取命令?-x。其他系列的文檔管理程序的用法基本相同。下面我們以dspar為例,舉例說明文檔管理器的使用方法。

1)?dspar-afunction.libsine.objcos.objflt.obj如果function.lib不存在,則此命令作用是將三個(gè)文件組合成一個(gè)function.lib庫。如果function.lib已經(jīng)存在,則此命令的作用是在function.lib庫中添加三個(gè)文件;

2)?dspar-tfunction.lib列出function.lib庫的所有文件。

3)?dspar-rfunction.lib sine.obj用新的sine.obj替換庫中的sine.obj.

4)?dspar-dfunction.lib flt.obj刪除function.lib庫中的flt.obj文件。

5)?dspar-xmacros.lib push.asm從macros.lib庫中提取出push.asm文件。如果想修改庫中的某一個(gè)文件,可以用-x命令從庫中提取出這個(gè)文件,修改之后再用-r命令替換。使用TMS320的DSP芯片C編譯器,可以用不同的選項(xiàng)來對源程序進(jìn)行編譯。程序包中所提供的RTS庫是采用最常用的一組選項(xiàng)生成的,但這不一定能滿足特殊應(yīng)用的需要,為使用戶能夠根據(jù)應(yīng)用的需要生成RTS庫,程序包中不僅提供了RTS目標(biāo)庫,還提供了源文件庫。用dspmk或mk30就可以生成符合應(yīng)用需要的TMS320C3x/C4xRTS庫。用dspmk或mk30生成庫時(shí),所有的選項(xiàng)和C編譯器的選項(xiàng)相同。例如:mk30-v30-o-x-mrrts.src-lrts30.lib從rts.src源文件庫生成TMS320C3x的RTS庫rts30.lib。7.2.5代碼格式轉(zhuǎn)換器代碼格式轉(zhuǎn)換器的作用是將鏈接器生成的.out文件(COFF文件格式)轉(zhuǎn)換為其他文件格式,如Intel的Hex文件格式、Tektronix的文件格式或Ti-tagged文件格式,以便于燒制EPROM,因?yàn)榇蠖鄶?shù)的EPROM編程器都不接受COFF文件格式。在TMS320C3x/C4x代碼生成程序包中分別提供了dsprom.exe和rom30.exe兩個(gè)程序,它們的使用方法相同。下面以dsprom.exe為例說明代碼格式轉(zhuǎn)換器的用法。代碼格式轉(zhuǎn)換的命令格式為:dsprom[-選項(xiàng)][COFF輸入文件[輸出文件1[輸出文件2]]]其中,選項(xiàng)有四種:

-x——輸出為Tektronicshex格式;

-i——輸出為Intelhex格式;

-w——輸出為Intelword格式;

-t——輸出為Ti-tagged格式;如果不指定選項(xiàng),則默認(rèn)的輸出文件格式為Tektronicshex格式。輸入文件若不指定擴(kuò)展名,則默認(rèn)的擴(kuò)展名為?.obj。若不指定輸出文件名,則輸出文件的擴(kuò)展名為?.hi、.lo、.hex和?.tag等。例如:

1)?dsprom-itest.out生成Intelhex格式的兩個(gè)文件test-hi和test.lo,其中test.hi包含高字節(jié)部分,test.lo包含低字節(jié)部分。

2)?dsprom-xtest.out生成Tektronics格式的兩個(gè)文件test.hi和test.lo,分別包含高字節(jié)和低字節(jié)。

3)?dsprom-wtest.out生成Intel字格式的一個(gè)文件test.hex。

4)?dsprom-ttest.out生成Ti-tagged格式的一個(gè)文件test.tag。7.2.6編譯匯編鏈接應(yīng)用舉例下面我們以TMS320C3x為例來介紹DSP程序的編譯、匯編和鏈接方法。對于用匯編語言編寫的DSP程序,只有匯編和鏈接兩個(gè)步驟;對于用C高級語言編寫的DSP程序,則首先需要將C程序編譯轉(zhuǎn)換為匯編程序,然后進(jìn)行匯編和鏈接操作。

1.匯編程序的匯編方法用匯編語言編寫的DSP程序只須用匯編工具程序進(jìn)行匯編即可得到目標(biāo)文件。例如,有一個(gè)名為sample.asm的DSP匯編程序,用下列命令即可得到其目標(biāo)文件sample.obj:asm30-v30sample.asm命令行中,選項(xiàng)-v30表示選用TMS320C3x。

2.C程序的編譯和匯編

C程序的編譯方法可以有兩種方法:一種是分步編譯法,另一種則是常用的一步編譯法。下面我們來說明這兩種方法。

7.2.1節(jié)中我們介紹了TI提供的代碼生成工具中的應(yīng)用程序,分步編譯法就是利用其中的若干個(gè)應(yīng)用程序來對C程序分幾個(gè)步驟進(jìn)行編譯匯編。設(shè)有一個(gè)名為samples的C語言程序,則采用分步編譯法對samples.c程序的編譯匯編過程如下。

(1)文法分析:ac30-v30samples.c,生成sample.if的中間文件;

(2)程序優(yōu)化:opt30-v30sample.if,生成sample.opt文件;

(3)代碼生成:cg30-v30sample.opt,生成sample.asm匯編文件;

(4)匯編:asm30-v30sample.asm,生成sample.obj目標(biāo)文件。

2)?一步編譯法用上述方法進(jìn)行編譯的優(yōu)點(diǎn)是步驟比較清晰,但實(shí)際使用時(shí)會(huì)感到比較麻煩。因此,TMS320C3x代碼生成工具程序中還提供了c130.exe應(yīng)用程序,利用這個(gè)程序可以對C程序一步從源程序編譯匯編和鏈接生成最終的sample.out文件。例如,下面的命令可以將samples.c編譯匯編和鏈接生成sample.out文件:c130-v30-o2sample.c-zsample.cmd其中,選項(xiàng)-o2表示激活最高級的優(yōu)化,-z表示需要鏈接,sample.cmd為鏈接控制命令文件,其內(nèi)容應(yīng)根據(jù)實(shí)際系統(tǒng)確定。例如,采用默認(rèn)存儲(chǔ)器分配的鏈接控制命令文件如下:/*sample.cmd*/

-c /*ROM初始化*/

sample.obj /*目標(biāo)文件*/

-1rts30.lib /*TMS320C3x運(yùn)行庫*/

-osample.out /*鏈接輸出文件*/在實(shí)際DSP應(yīng)用中,由于程序模塊較多,有的是用C語言編寫的,有的是用匯編語言編寫的,有的還可能采用兩種語言混合編寫。因此,對C程序一般可采用兩步法。第一步是用cl30對C程序進(jìn)行編譯和匯編生成?.obj文件,但不進(jìn)行鏈接;第二步是用下面的方法對所有的.OBJ文件進(jìn)行鏈接。

3.鏈接方法用c130和asm30對C程序或匯編程序進(jìn)行編譯或匯編后生成了?.obj文件,將多個(gè)目標(biāo)文件鏈接以形成最終的輸出文件的方法是:

Lnk30sample.cmd其中,sample.cmd是一個(gè)用戶定義的鏈接命令控制文件。7.3代碼調(diào)試工具

7.3.1C/匯編源碼調(diào)試器

C/匯編源碼調(diào)試器是一種工作在PC上的先進(jìn)的軟件接口,它與調(diào)試工具(如軟件模擬器、評價(jià)模塊、軟件開發(fā)系統(tǒng)、仿真器)配合使用,調(diào)試器可以完全控制用C語言或匯編語言編寫的程序。用戶程序既可用C語言調(diào)試,也可用匯編語言調(diào)試,還可以進(jìn)行C和匯編語言的混合調(diào)試。調(diào)試器提供了非常友好的用戶界面,面向窗口、支持鼠標(biāo)和菜單式的接口使用戶不必記憶復(fù)雜的命令,使用十分方便。

1.調(diào)試器的主要特征調(diào)試器的主要特征如下:

(1)提供完善的控制程序運(yùn)行的特征:如條件執(zhí)行,單步執(zhí)行,斷點(diǎn)設(shè)置和清除,批文件執(zhí)行命令等。

(2)多操作支持:增強(qiáng)了并行處理能力以支持TMS320C40的多處理器的調(diào)試。

(3)多級調(diào)試:可同時(shí)調(diào)試C和匯編語言,調(diào)試C語言時(shí),用戶可同時(shí)觀察C源碼及由C源碼產(chǎn)生的目標(biāo)代碼的反匯編,調(diào)試器也可用做匯編語言調(diào)試器。

(4)可靈活配置的界面:由于調(diào)試器的顯示界面是可配置的,因此用戶可根據(jù)需要設(shè)置不同的界面,顯示的顏色、窗口的邊界、尺寸和位置等都可以改變。

(5)靈活的命令輸入:輸入命令的方式靈活多樣,可用鍵入命令法、鼠標(biāo)、功能鍵或下拉菜單輸入。調(diào)試器具有命令記憶功能,不必重新輸入即可執(zhí)行以前輸入的命令。

(6)全屏幕編輯:任何窗口中顯示的數(shù)據(jù)值可很容易地更改。

(7)連續(xù)更新:調(diào)試器可連續(xù)更新屏幕上的信息,并高亮顯示更改的數(shù)據(jù)。

(8)綜合數(shù)據(jù)顯示:用戶可方便地在屏幕上建立窗口,以顯示和編輯變量、數(shù)組、結(jié)構(gòu)及指針等數(shù)據(jù)類型。

(9)功能強(qiáng)大的命令集:調(diào)試器提供了一個(gè)充分利用C表達(dá)式的命令集。

2.調(diào)試器的調(diào)試模式調(diào)試器提供三種調(diào)試模式:自動(dòng)模式,匯編模式,混合模式。

(1)自動(dòng)模式:在自動(dòng)模式中,調(diào)試器自動(dòng)顯示當(dāng)前正在運(yùn)行的代碼,或者是匯編語言,或者是C語言。這是默認(rèn)的調(diào)試模式。

(2)匯編模式:在這種模式下,顯示的是匯編語言,不管運(yùn)行的是C語言還是匯編語言。

(3)混合模式:在這種模式下,可以同時(shí)顯示C語言程序和匯編程序。

3.調(diào)試器窗口調(diào)試器能顯示多種不同類型的窗口。窗口的名稱顯示在窗口的頂行。調(diào)試器共有八種類型的窗口,可以分為3大類。

1)命令顯示窗命令顯示窗提供一個(gè)可以鍵入各種命令的區(qū)域,并顯示各種信息,如進(jìn)程信息、錯(cuò)誤信息或命令輸出。

2)代碼顯示窗代碼顯示窗顯示匯編語言代碼或C語言代碼。有三種代碼顯示窗口:

(1)反匯編窗口:顯示內(nèi)存的反匯編碼;

(2)文件窗口:顯示任何文本文件,主要是C語言源程序;

(3)進(jìn)程調(diào)用窗口:運(yùn)行C代碼時(shí)顯示當(dāng)前跟蹤運(yùn)行的函數(shù)進(jìn)程。

3)數(shù)據(jù)顯示窗數(shù)據(jù)顯示窗用以觀察和修改各種類型的數(shù)據(jù)。有四種數(shù)據(jù)顯示窗口:

(1)內(nèi)存顯示窗口:顯示一定范圍的內(nèi)存內(nèi)容;

(2)?CPU窗口:顯示處理器各個(gè)寄存器的內(nèi)容;

(3)數(shù)據(jù)顯示窗口:顯示一個(gè)集合的數(shù)據(jù)類型,如數(shù)組、結(jié)構(gòu)等;

(4)觀察窗口:顯示己選定的數(shù)據(jù),如變量、寄存器或內(nèi)存的某個(gè)單元。調(diào)試器的窗口可任意移動(dòng)或改變大小,在數(shù)據(jù)顯示窗口中可以編輯其中的任一個(gè)值。當(dāng)然,在做這些工作之前,必須首先選擇好窗口并使之成為活動(dòng)窗口。

4.調(diào)試器的命令輸入調(diào)試器提供了非常靈活方便的命令輸入方法。調(diào)試器提供的主要命令輸入方法如下。

1)命令行輸入命令行輸入就是在調(diào)試器的命令窗口中鍵入命令。例如:

gomain;執(zhí)行到程序的main處

winCPU;激活CPU窗口利用調(diào)試器的記憶功能可以用簡便的方法輸入以前鍵入過的命令。例如,用TAB鍵可以向后逐條移動(dòng)執(zhí)行過的命令,用TAB+SHIFT鍵可以向前逐條移動(dòng)執(zhí)行過的命令,選擇好以后按回車鍵即可。

2)菜單輸入菜單輸入是一種常用的輸入方法。選擇菜單時(shí)可以采用三種不同的方法:鼠標(biāo)輸入、按鍵輸入和熱鍵輸入。熱鍵輸入主要用于沒有下拉菜單的主菜單,如RUN,STEP和NEXT。鼠標(biāo)輸入比較方便,用鼠標(biāo)左鍵點(diǎn)中相應(yīng)的主菜單和下拉菜單即可。按鍵輸入時(shí)首先同時(shí)按下ALT鍵和代表主菜單的高亮字母以選擇主菜單,然后按下代表下拉菜單的高亮字母即可。當(dāng)然,也可以用方向鍵選擇好下拉菜單再按回車鍵。

3)批文件輸入調(diào)試器提供的take命令可以使調(diào)試器執(zhí)行一個(gè)批處理文件。設(shè)有一個(gè)批處理文件batcom.fil的內(nèi)容如下:

reset

loadsample.out

gomain則在調(diào)試器的命令行中鍵入takebatcom.fil,就可使調(diào)試器在復(fù)位系統(tǒng)之后,裝入sample.out并執(zhí)行至程序的main處。

5.調(diào)試器使用方法簡介使用調(diào)試器調(diào)試程序主要有以下5個(gè)步驟:

1)調(diào)試器配置

在使用調(diào)試器之前,首先必須根據(jù)需要配置調(diào)試器。調(diào)試器配置包括內(nèi)存配置和顯示配置,其中內(nèi)存配置尤為重要。內(nèi)存配置用于告訴調(diào)試器哪些內(nèi)存有效,哪些內(nèi)存不能進(jìn)行存取。因此提供給調(diào)試器的內(nèi)存映像應(yīng)與實(shí)際目標(biāo)系統(tǒng)的內(nèi)存配置相一致,當(dāng)然內(nèi)存映像也應(yīng)與鏈接命令文件中的MEMORY定義相匹配。當(dāng)內(nèi)存映像配置好以后,啟動(dòng)調(diào)試器運(yùn)行程序時(shí),如果訪問一個(gè)沒有定義的存儲(chǔ)區(qū),則調(diào)試器將顯示一個(gè)錯(cuò)誤信息。一般地,配置內(nèi)存可在啟動(dòng)調(diào)試器之前進(jìn)行。方法是在調(diào)試器能夠自動(dòng)讀到的批文件init.cmd中放入內(nèi)存映像命令。啟動(dòng)調(diào)試器,在初始化過程中讀入init.cmd的命令,從而完成內(nèi)存配置。需要注意的是,對于不同的調(diào)試環(huán)境,init.cmd的文件名有所不同,如模擬器中的文件名為siminit.cmd,仿真器中的文件名為emuinit.cmd等。例7.1TMS320C3x存儲(chǔ)映像配置示例。MR;

重設(shè)內(nèi)存映像MA0x000000,0x020000,RAM ;SRAM靜態(tài)RAMMA0x804000,0x001000,RAM ;COMPORT通信口MA0x809800,0x000400,RAM ;RAM0片內(nèi)RAM塊0MA0x809c00,0x000400,RAM ;RAM1片內(nèi)RAM塊1;;存儲(chǔ)器映像的外設(shè);MA0x808000,0x000010,RAM ;DMAMA0x808020,0x000010,RAM ;TIMER0定時(shí)器0MA0x808030,0x000010,RAM ;TIMERI定時(shí)器1MA0x808040,0x000010,RAM ;SPORT0串行口0MA0x808050,0x000010,RAM ;SPORT1串行口1MA0x808060,0X000001,RAM;XBUSCTL擴(kuò)展總線控制MA0x808064,0x000001,RAM;PBUSCTL主總線控制;MAPON;

啟動(dòng)內(nèi)存映像其中,MA(MapAdd)命令定義了有效的內(nèi)存范圍,并標(biāo)識這些范圍的讀寫特征。地址表示一段存儲(chǔ)器的起始地址,長度表示該段存儲(chǔ)器的長度,類型表示這段存儲(chǔ)器的讀寫特征;ROM表示只讀,RAM表示可讀可寫,WOM表示只寫,PROTECT表示不可存取。TORT表示輸入口,OPORT表示輸出口,IOPORT表示輸入/輸出口。MAPON命令用于啟動(dòng)內(nèi)存映像。

Init.cmd是在啟動(dòng)調(diào)試器時(shí)自動(dòng)裝入的。如果在啟動(dòng)后不想用init.cmd中的內(nèi)存配置,則也可以調(diào)入另一個(gè)存儲(chǔ)器配置。方法是創(chuàng)建另外一個(gè)內(nèi)存配置文件。文件內(nèi)容的格式如下:

MR;

重設(shè)內(nèi)存映像

MA命令;定義新的內(nèi)存映像

MAPON;啟動(dòng)內(nèi)存映像

設(shè)文件名為mem.new,則在啟動(dòng)調(diào)試器后,用下列命令讀入即可對內(nèi)存重新配置為mem.new的內(nèi)容:

takemem.new在調(diào)試過程中也可以修改內(nèi)存映像。如用MA命令可增加一段內(nèi)存,用MD命令可刪除一段內(nèi)存,用MR命令則刪除內(nèi)存映像中的所有內(nèi)存段,還可以用ML命令列出已經(jīng)定義的內(nèi)存及其讀寫特征。除了可對內(nèi)存進(jìn)行配置外,屏幕顏色、窗口位置、窗口大小和邊框類型等也可以進(jìn)行配置。在默認(rèn)情況下,啟動(dòng)調(diào)試器自動(dòng)調(diào)入init.clr文件中的配置。如果要修改配置,則在修改后將當(dāng)前配置存入一個(gè)文件,下次啟動(dòng)調(diào)試器后再裝入這個(gè)配置文件即可,也可將修改后的配置存入init.clr中,則啟動(dòng)調(diào)試器時(shí)自動(dòng)裝入修改的配置,不必重新裝入。

2)裝入程序調(diào)試器裝入運(yùn)行并調(diào)試的程序是編譯匯編鏈接后生成的.out文件。裝入的方法是在主菜單的FILE命令下選擇LOAD命令,然后鍵入文件名即可。如果是由C程序得到的文件,則同時(shí)在FILE窗口中顯示相應(yīng)的C語言程序。

3)運(yùn)行程序

運(yùn)行程序的方法主要有run,runb,go、單步運(yùn)行等,使用方法如下。

run是最基本的運(yùn)行命令,執(zhí)行run命令后,程序開始運(yùn)行直至遇到斷點(diǎn)或按了Esc鍵或鼠標(biāo)左鍵。

runb用來運(yùn)行并計(jì)算一段程序的時(shí)鐘周期數(shù)。若要計(jì)算某一段程序執(zhí)行的周期數(shù),首先在這段程序的開始和結(jié)束處各設(shè)置一個(gè)斷點(diǎn),然后運(yùn)行run至第一個(gè)斷點(diǎn),再運(yùn)行runb至第二個(gè)斷點(diǎn),在命令窗口輸入?clk命令,就可以得到該段程序的執(zhí)行周期數(shù)。

go命令用來執(zhí)行至程序的某一點(diǎn),如gomain就使程序執(zhí)行至main標(biāo)號處。單步運(yùn)行分step和next兩種。用step命令調(diào)試C語言時(shí),每執(zhí)行一次就執(zhí)行一條C語句,調(diào)試匯編語言時(shí),則每執(zhí)行一次就執(zhí)行一條匯編語句。next命令與step命令類似,所不同的是在遇到函數(shù)調(diào)用時(shí),不進(jìn)入函數(shù)內(nèi)部,而直接執(zhí)行到調(diào)用語句的下一條語句。運(yùn)行程序時(shí),還可以有條件地運(yùn)行。如:

runi<100 即只要i<100,調(diào)試器就一直運(yùn)行;

step50 即step單步運(yùn)行50次;

next100 即next單步運(yùn)行100次。

4)觀察運(yùn)行結(jié)果調(diào)試程序時(shí),觀察運(yùn)行結(jié)果是檢驗(yàn)程序運(yùn)行正確與否的重要一步。調(diào)試器提供了靈活的觀察運(yùn)行結(jié)果的手段。觀察數(shù)據(jù)一般有下列三種方法:

(1)直接在己有的顯示窗口中觀察。如在CPU窗口中可以觀察到處理器的寄存器值,在存儲(chǔ)器窗口中可以觀察到一段內(nèi)存的內(nèi)容,首先在命令窗口中鍵入要觀察的內(nèi)存的首地址,如要觀察TMS320C3x從0x809800開始的一段內(nèi)存,則鍵入:

mem0x809800

(2)在命令窗口中用?i命令觀察。這種方法比較適合于觀察一些臨時(shí)的變量。如:

?i 觀察變量i的內(nèi)容;

?AR0 觀察寄存器AR0;

?*0x809800,x 以十六進(jìn)制觀察0x809800內(nèi)存的內(nèi)容;

?f0 觀察R0的浮點(diǎn)值。

(3)增加顯示窗口跟蹤變量。這類顯示窗口又有兩種。一種是WATCH窗,可以觀察單個(gè)變量、寄存器或指定的存儲(chǔ)單元。如:

wai 觀察變量i;

wasp 觀察堆棧指針;

wa0x809800 觀察0x809800內(nèi)存的內(nèi)容。另一種是DISP窗,可以觀察集合數(shù)據(jù)類型,如數(shù)組、結(jié)構(gòu)等。例如:

dispindata 觀察數(shù)組indata;

disp*(float*)0x809800 以浮點(diǎn)形式觀察0x809800內(nèi)存。

5)編輯和更改數(shù)據(jù)編輯、更改數(shù)據(jù)的方法主要有兩種。一種方法是直接在數(shù)據(jù)顯示窗口中更改,如在CPU窗口中可以更改寄存器值,在存儲(chǔ)器窗口中可以更改內(nèi)存的內(nèi)容,也可在DISP窗口和WATCH窗口中更改數(shù)據(jù)內(nèi)容。另一種方法是利用表達(dá)式的附加作用更改數(shù)據(jù),如:

?AR3++AR3內(nèi)容加1;

?AR0=8AR0等于8。7.3.2初學(xué)者工具DSK初學(xué)者工具DSK(DSPStarterKit)是TI公司提供給初學(xué)者進(jìn)行DSP編程練習(xí)的一套廉價(jià)的實(shí)時(shí)軟件調(diào)試工具。DSK板上除了有一片DSP芯片之外,還提供了可用于聲音輸入和輸出接口的模/數(shù)和數(shù)模接口芯片(一般為一片TLC32044),它可以與PC進(jìn)行通信,在PC上匯編后的程序可以通過串行或并行接口下載到DSP芯片的內(nèi)部RAM執(zhí)行。此外,DSK板上還將DSP芯片的地址和數(shù)據(jù)總線引出,便于用戶對DSK板進(jìn)行存儲(chǔ)器等硬件資源的擴(kuò)充,并在DSK硬件的基礎(chǔ)上形成用戶獨(dú)立的DSP系統(tǒng)。以下是TMS320C3xDSK所提供的軟硬件資源。(1)?50?MHz的TMS320C31(內(nèi)部具有2K字的RAM);(2)?A/D和D/A轉(zhuǎn)換芯片TLC32044;(3)與PC之間的標(biāo)準(zhǔn)并行接口;(4)匯編器;(5)調(diào)試器軟件接口。7.3.3軟件模擬器軟件模擬器是一種模擬DSP芯片各種功能并在非實(shí)時(shí)條件下進(jìn)行軟件調(diào)試的調(diào)試工具,它不需要目標(biāo)硬件支持,只需在計(jì)算機(jī)(如PC)上運(yùn)行,是一種廉價(jià)、方便的調(diào)試工具。當(dāng)然,由于DSP芯片用軟件模擬實(shí)現(xiàn),運(yùn)行速度慢是軟件模擬器的一個(gè)突出的缺點(diǎn)。軟件模擬器模擬DSP芯片的I/O口時(shí)采用與文件關(guān)聯(lián)的方法來實(shí)現(xiàn),因而調(diào)試中所需的I/O值可從文件中讀取,輸出到I/O口的值也可存儲(chǔ)在文件中。軟件模擬器的主要特征有:

(1)在計(jì)算機(jī)上執(zhí)行的是DSP程序;

(2)可修改和查看寄存器;

(3)可修改和顯示數(shù)據(jù)和程序存儲(chǔ)器,任何時(shí)候都可進(jìn)行存儲(chǔ)器的修改,也可在程序裝入前進(jìn)行存儲(chǔ)器初始化;

(4)可模擬外設(shè)、高速緩存(cache)及流水線、定時(shí)等功能;

(5)可計(jì)算指令周期數(shù);

(6)可編程的斷點(diǎn)設(shè)置,可在取指令、讀寫存儲(chǔ)器及錯(cuò)誤條件滿足時(shí)設(shè)置斷點(diǎn);(7)可進(jìn)行累加器、程序計(jì)數(shù)器、輔助寄存器的跟蹤;(8)指令的單步執(zhí)行;(9)用戶可設(shè)定中斷產(chǎn)生間隔;(10)在遇到非法操作碼和無效數(shù)據(jù)訪問時(shí)提示錯(cuò)誤信息;(11)從文件中執(zhí)行命令。在用模擬器調(diào)試程序前,首先必須對源文件進(jìn)行匯編,如果程序由多個(gè)模塊組成,還必須進(jìn)行鏈接。鏈接后的絕對代碼可以裝入模擬器進(jìn)行調(diào)試。

TI的各類DSP芯片均有相應(yīng)的軟件模擬器支持,這些軟件模擬器有:(1)?TMS320C1x軟件模擬器;(2)?TMS320C2x軟件模擬器;(3)?TMS320C2xx軟件模擬器;(4)?TMS320C3x軟件模擬器;(5)?TMS320C4x軟件模擬器;(6)?TMS320C5x軟件模擬器;(7)?TMS320C54x軟件模擬器。在各類軟件模擬器中,新版本的模擬器都采用了C和匯編源碼調(diào)試器接口,允許用戶用C語言或匯編語言進(jìn)行調(diào)試,也可進(jìn)行兩種語言的混合調(diào)試,用戶接口界面非常友好。其程序執(zhí)行的方式有下列幾種方式:單條指令/多條指令,單周期/多周期,執(zhí)行到條件滿足,如果條件滿足一直執(zhí)行,執(zhí)行設(shè)置的循環(huán)次數(shù),無條件執(zhí)行至鍵輸入等。用軟件模擬器模擬I/O口時(shí),首先用與存儲(chǔ)器配置相同的方法將I/O口增加到存儲(chǔ)器映像中,然后用關(guān)聯(lián)命令MC將I/O口與一個(gè)文件相關(guān)聯(lián),MC命令的格式為

MC口地址,頁,文件名,{READ/WRITE}其中的“頁”分別用1和2表示,“1”表示串行口,“2”表示并行口。下面我們以TMS320C3x為例,說明軟件模擬器模擬I/O口時(shí)的使用方法。在TMS320C3x中,若要將50h口配置為輸入口,并與in.dat文件關(guān)聯(lián),則命令如下:

MA0x50,1,0xl,IPORT;口地址50h配置為輸入口

MC0x50,1,in.dat,READ ;口地址50h與文件in.dat關(guān)聯(lián)

TMS320C3x若有具有兩個(gè)串行口,一個(gè)是標(biāo)準(zhǔn)的同步串行口,一個(gè)是DM串行口,則兩個(gè)串行口的配置方法如下:MA0X20,1,1,IPORT;配置DRR(0X20)為輸入口MA0X21,1,1,OPORT;配置DXR(0X21)為輸出口

MA0X30,1,1,IPORT;配置TRCV(0X30)為輸入口MA0X31,1,1,OPORT;配置TDXR(0X31)為輸出口MC0X20,1,RECV.DAT,READ;將DRR與RECV.DAT文件關(guān)聯(lián)MC0X21,1,XMIT.DAT,WRITE ;將DXR與XMIT.DAT文件關(guān)聯(lián)

MC0X30,1,TRCV.DAT,READ;將TRCV與TRCV.DAT文件關(guān)聯(lián)

MC0X31,1,TXMT.DAT,WRITE;將TDXR與TXMT.DAT文件關(guān)聯(lián)上述配置可以放入Simlator的初始配置命令文件siminit.cmd中,這樣,每次啟動(dòng)simulator調(diào)試器時(shí)自動(dòng)進(jìn)行配置,當(dāng)然在調(diào)試過程中也可以重新進(jìn)行配置。關(guān)聯(lián)文件具有特定的格式,對一般的I/O口和標(biāo)準(zhǔn)的同步串行口,文件格式為每行一個(gè)十六進(jìn)制數(shù),如:

0x0123

0x4567

0x89ab

對TDM串行口,輸入和輸出文件格式需要三個(gè)區(qū)域:地址、數(shù)據(jù)和通道號。每個(gè)區(qū)域都是十六進(jìn)制格式,中間用空格分開,如:

0x800x01230

0x400x45671

0x200x89ab2

0x100xcdef3

0x010x01234

Simulator模擬串行口中斷和外部中斷是通過設(shè)置偽寄存器的方法實(shí)現(xiàn)的。每一個(gè)中斷設(shè)置兩個(gè)偽寄存器,一個(gè)是中斷周期寄存器,另一個(gè)是中斷定時(shí)器寄存器。中斷周期寄存器內(nèi)設(shè)置的是兩個(gè)中斷間隔的機(jī)器周期數(shù)。中斷定時(shí)器寄存器內(nèi)包含的是當(dāng)前至下一個(gè)中斷之間的機(jī)器周期數(shù)。中斷定時(shí)器寄存器以機(jī)器周期的速率進(jìn)行遞減,若中斷使能,則遞減至0時(shí)就產(chǎn)生一個(gè)中斷,同時(shí)將中斷周期寄存器中的值裝入。7.3.4評價(jià)模塊評價(jià)模塊(EVM)是一種低成本的開發(fā)板,在EVM板上一般配置了一定數(shù)量的硬件資源,可用來進(jìn)行DSP芯片評價(jià)、性能評估和有限的系統(tǒng)調(diào)試。調(diào)試接口也采用上述的C/匯編源碼調(diào)試器。7.3.5軟件開發(fā)系統(tǒng)軟件開發(fā)系統(tǒng)(SWDS)是一塊PC插卡,可提供低成本的評價(jià)和實(shí)時(shí)軟件開發(fā)。它可用來進(jìn)行實(shí)時(shí)的軟件調(diào)試,程序在DSP芯片上實(shí)時(shí)運(yùn)行。與仿真器不同的是軟件開發(fā)系統(tǒng)不提供實(shí)時(shí)硬件調(diào)試功能,因此涉及目標(biāo)I/O操作時(shí)一般用文件I/O代替。7.3.6仿真器仿真器即擴(kuò)展開發(fā)系統(tǒng)(XDS),可用來進(jìn)行系統(tǒng)級的集成調(diào)試,是進(jìn)行DSP芯片軟硬件開發(fā)的最佳工具。目前主要有兩種類型的仿真器。一種是傳統(tǒng)的電路仿真器,主要用于早期的TMS320C1x和TMS320C2x兩代DSP芯片的仿真,這兩代DSP芯片沒有仿真信號線;另一種是先進(jìn)的掃描仿真器,主要用于TMS320C3x、TMS320C2xx/C5x、TMS320C54x/C55x和TMS320C6000等DSP芯片的仿真,在這些DSP芯片上提供了用于仿真的一些信號線。采用傳統(tǒng)的電路仿真器對用戶板進(jìn)行硬件仿真時(shí),仿真器的電纜插頭必須插入到用戶硬件電路中DSP芯片的相應(yīng)位置,也就是說,仿真電纜的插頭引腳必須與DSP芯片的引腳一一對應(yīng)。TI的XDS/22仿真器就屬于這一類,主要用于TMS320C1x和TMS20C2x等芯片的仿真。掃描仿真器不采用插入仿真的方法,而是通過DSP芯片上提供的幾個(gè)仿真引腳來實(shí)現(xiàn)仿真功能的。這種方法為TI公司所開發(fā),可用來解決高速DSP芯片的仿真。由于高速DSP芯片具有高度并行的結(jié)構(gòu)、快速的指令周期、高密度的封裝等特點(diǎn),采用傳統(tǒng)的電路仿真方法很難實(shí)現(xiàn)可靠的仿真。掃描仿真消除了傳統(tǒng)的電路仿真存在的問題,例如,仿真電纜過長會(huì)引起信號失真,仿真插頭會(huì)引起可靠性差等。用戶程序可在目標(biāo)系統(tǒng)的片內(nèi)或片外存儲(chǔ)器實(shí)時(shí)運(yùn)行,而不會(huì)因仿真器引入額外的等待狀態(tài)。

DSP芯片內(nèi)部是通過移位寄存器掃描鏈來實(shí)現(xiàn)掃描仿真的,這個(gè)掃描鏈被外部的串行口訪問。采用掃描仿真,即使芯片已經(jīng)焊在電路板上,也可進(jìn)行仿真調(diào)試,這對于在生產(chǎn)過程中調(diào)試DSP系統(tǒng)也帶來極大的方便。

TI公司為TMS320C3x/C4x,TMS320C5x,TMS320C2xx,TMS320C54x和TMS320C6000等DSP芯片都提供了相應(yīng)的仿真器。TMS320C3x(不包括TMS320VC33)的仿真器采用了12線的仿真接口,通過仿真器接口與目標(biāo)系統(tǒng)的TMS320C3x相接進(jìn)行仿真,其中,EMU0、EMU3為仿真線;H3為時(shí)鐘線;第7腳的PD為存在檢測線,用于指示仿真頭與目標(biāo)系統(tǒng)的連接,在目標(biāo)系統(tǒng)中,此腳接至?+5?V;第8腳為空腳;其余均為地線。其他DSP芯片的仿真器接口都采用JTAG標(biāo)準(zhǔn)IEEE1149.1。對于TMS320VC33芯片來說,當(dāng)前國產(chǎn)的仿真器主要有合眾達(dá)的SEED和北京瑞泰電子科技的ICETEK—5100。表7.1是仿真信號的定義,其中TDO信號與TCK時(shí)鐘的下降沿對齊,TMS和TDI在TCK時(shí)鐘的上升沿取樣。表7.1JTAG仿真信號定義掃描仿真器的用戶界面均采用上面介紹的C/匯編源碼調(diào)試器界面,與軟件模擬器的用戶界面完全相同。目標(biāo)代碼可通過掃描接口從PC下載到目標(biāo)系統(tǒng)的存儲(chǔ)器中,一般下載1?KB的代碼約需100ms的時(shí)間。7.4CC集成開發(fā)環(huán)境

7.4.1CC功能簡介

TI公司的DSP集成開發(fā)環(huán)境CC(CodeComposer)是一個(gè)基于Windows的DSP開發(fā)平臺(tái),可以加速和提高程序員創(chuàng)建和測試實(shí)時(shí)嵌入式信號處理系統(tǒng)的開發(fā)過程,從而縮短將產(chǎn)品推向市場所需要的時(shí)間。

CC主要包含了以下功能:

(1)集成可視化代碼編輯界面,可直接編寫C、匯編、.H文件、.cmd文件等。

(2)集成代碼生成工具,包括匯編器、優(yōu)化C編譯器、連接器等。

(3)基本調(diào)試工具,如裝入執(zhí)行代碼(.out文件),查看寄存器、存儲(chǔ)器、反匯編、變量窗口等,支持C源代碼級調(diào)試。

(4)支持多DSP調(diào)試。

(5)斷點(diǎn)工具,包括硬件斷點(diǎn)、數(shù)據(jù)空間讀/寫斷點(diǎn),條件斷點(diǎn)(使用GEL編寫表達(dá)式)等。

(6)具有探針工具(ProbePoints),可用于算法仿真、數(shù)據(jù)監(jiān)視等。

(7)分析工具(ProfilePoints),可用于評估代碼執(zhí)行的時(shí)鐘數(shù)。

(8)數(shù)據(jù)的圖形顯示工具,可繪制時(shí)域/頻域波形、眼圖、星座圖、圖像等,并可自動(dòng)刷新(使用Animate命令運(yùn)行)。

(9)提供GEL工具,用戶可以編寫自己的控制面板/菜單,方便直觀地修改變量,配置參數(shù)等。

(10)支持RTDX(RealTimeDataExchange)技術(shù),可在不中斷目標(biāo)系統(tǒng)運(yùn)行的情況下,實(shí)現(xiàn)DSP與其他應(yīng)用程序(OLE)的數(shù)據(jù)交換。

(11)采用開放式的Plug-in技術(shù),支持其他第三方的ActiveX插件,支持包括軟仿真在內(nèi)的各種仿真器(只需安裝相應(yīng)的驅(qū)動(dòng)程序)??梢?,CC具有實(shí)時(shí)、多任務(wù)、可視化的軟件開發(fā)特點(diǎn),已經(jīng)成為TIDSP家族的程序設(shè)計(jì)、制作、調(diào)試、優(yōu)化的利器。本書對CC的基本概念、多處理功能、斷點(diǎn)和探測點(diǎn)、文件輸入/輸出功能、可視化窗口、存儲(chǔ)器圖、觀察窗口、集成編輯器、項(xiàng)目環(huán)境、代碼執(zhí)行評估、通用擴(kuò)展語言(GEL)和RTDX技術(shù)做了詳細(xì)分析。使讀者能夠快速地使用CC開發(fā)出優(yōu)秀的TI公司TMS320C3x系列DSP代碼。7.4.2CC軟件的安裝

CC4.10軟件對PC機(jī)的要求為MicrosoftWindows98、WindowsNT4.0、Windows2000、WindowsXP操作系統(tǒng),32?MB的內(nèi)存,100?MB的剩余硬盤空間,SVGA顯示器(分辨率為800?×?600以上)。安裝過程如下:

(1)在Windows下將安裝光盤插入CD-ROM驅(qū)動(dòng)器中,運(yùn)行光盤根目錄下的setup.exe,按照向?qū)У奶崾緦C安裝到硬盤中,如圖7.1所示。在WindowsNT、Windows2000及WindowsXP系統(tǒng)中,必須使用管理員或特權(quán)模式。安裝程序在安裝盤中建立一個(gè)目錄tic3x4x。最后系統(tǒng)提示重啟計(jì)算機(jī)完成安裝。完成安裝后,安裝程序?qū)⒆詣?dòng)在計(jì)算機(jī)桌面上創(chuàng)建“CC′C3x-′C4x”和“SetupCC′C3x-′C4x”兩個(gè)圖標(biāo),如圖7.2所示。圖7.1CC的安裝

圖7.2CC圖標(biāo)設(shè)置

(2)安裝補(bǔ)丁程序。運(yùn)行安裝光盤中的“cc_c3x4x_sp2.exe”程序安裝補(bǔ)丁。最后系統(tǒng)提示重啟計(jì)算機(jī)完成安裝。重啟后自動(dòng)進(jìn)入CCsetup界面,這時(shí)可以在里面進(jìn)行相應(yīng)的設(shè)置;或者將其關(guān)閉進(jìn)入Windows。

(3)安裝硬件仿真器驅(qū)動(dòng)程序。常用的仿真器接口有并口和USB兩種結(jié)構(gòu),由于USB的接口方便,即插即用,故現(xiàn)在用戶多選用USB接口的。安裝完驅(qū)動(dòng)程序后,在硬件設(shè)備中出現(xiàn)一個(gè)紅色的蘋果標(biāo)志,說明安裝成功。7.4.3CC軟件的設(shè)置在安裝CC之后、運(yùn)行CC軟件之前,須首先運(yùn)行CC設(shè)置程序以建立CC集成開發(fā)環(huán)境與目標(biāo)板或Simulator之前的通信接口。CC是一個(gè)開放的環(huán)境,通過設(shè)置不同的驅(qū)動(dòng),完成對不同環(huán)境的支持。使用CC進(jìn)行仿真有兩種方式,一種硬件仿真器,一種為軟件自帶的Simulator。

CC的設(shè)置就是用來定義DSP芯片和目標(biāo)板類型,或者是選擇軟件的模擬器。使用Simulator時(shí)可以沒有目標(biāo)板只在CC環(huán)境下模擬運(yùn)行DSP程序。CC的設(shè)置大致有以下幾個(gè)步驟:

(1)啟動(dòng)CC配置程序。雙擊桌面上的SetupCC快捷圖標(biāo),彈出對話框如圖7.3所示。圖7.3CC配置對話框

(2)清除以前定義的配置。在圖7.3所示的對話框中,單擊“ClearSystemConfiguration”按鈕,彈出確認(rèn)清除命令對話框,選擇“Yes”,清除以前的配置。

(3)選擇與目標(biāo)系統(tǒng)相匹配的配置文件。例如使用C33軟件仿真器,則在“Available”列表中選擇“C33Simulator”項(xiàng),對應(yīng)的系統(tǒng)配置信息顯示在“SystemConfiguration”欄中。對話框中的“Filters”用于設(shè)置DSP類型、平臺(tái)類型、是否進(jìn)行內(nèi)存映射等。

(4)將所選中的配置文件加入到系統(tǒng)配置中。單擊圖7.3對話框中的“Addtosystemconfiguration”按鈕,“SetupCC”將“C33Simulator”作為系統(tǒng)的配置,并將所選擇的配置顯示在系統(tǒng)設(shè)置窗口中。單擊“Close”按鈕,關(guān)閉對話框后出現(xiàn)CC系統(tǒng)設(shè)置窗口,如圖7.4所示。在系統(tǒng)配置欄目的“MySystem”圖標(biāo)下,顯示系統(tǒng)的配置。圖7.4CC系統(tǒng)設(shè)置窗口

(5)安裝驅(qū)動(dòng)程序。在圖7.4中,單擊“InstallaDeviceDriver”,彈出選擇器件驅(qū)動(dòng)程序?qū)υ捒?,如圖7.5所示。選擇驅(qū)動(dòng)程序(如tisimC33.dvr),單擊“打開”按鈕。隨后彈出器件驅(qū)動(dòng)屬性對話框,如圖7.6所示。單擊“OK”按鈕,完成器件驅(qū)動(dòng)程序的安裝。圖7.5選擇器件驅(qū)動(dòng)程序?qū)υ捒驁D7.6器件驅(qū)動(dòng)屬性對話框

(6)保存系統(tǒng)配置。在圖7.4的窗口中,打開“File”菜單,單擊“Save”按鈕,將系統(tǒng)配置保存在系統(tǒng)寄存器中,完成CC的系統(tǒng)配置。7.4.4CC文件名介紹在使用CC軟件的過程中,所要用到的文件類型如下。

(1)?*.mak:CC定義的工程項(xiàng)目文件;

(2)?*.c:C語言編寫的源程序文件;

(3)?*.asm:匯編語言編寫的源程序文件;

(4)?*.h:C語言程序的頭文件,包括DSP/BIOSAPI模塊的頭文件;

(5)?*.lib:庫文件;

(6)?*.cmd:鏈接命令文件;

(7)?*.obj:由源文件編譯或匯編后所生成的目標(biāo)文件;

(8)?*.out:完成編譯、匯編、鏈接后所形成的可執(zhí)行文件,可在CC監(jiān)控下調(diào)試和執(zhí)行;

(9)?*.wks:工作空間文件,可用來記錄工作環(huán)境的設(shè)置信息。7.4.5CC的應(yīng)用界面

CC的可視界面設(shè)計(jì)十分友好,允許用戶對編輯窗口以外的其他所有窗口和工具條進(jìn)行隨意設(shè)置。雙擊桌面的“CC'C3x–'C4x”圖標(biāo),就可以進(jìn)入CC的主界面。一個(gè)典型的CC開發(fā)環(huán)境界面由主菜單、工具條、工程窗口、編輯窗口、反匯編窗口、圖形顯示窗口、內(nèi)存單元顯示窗口和寄存器顯示窗口等構(gòu)成,如圖7.7所示。圖7.7CC軟件主界面

(1)工程窗口:用來組織用戶的若干程序,構(gòu)成一個(gè)工程項(xiàng)目。用戶可以從工程列表中選擇需要編輯和調(diào)試的程序。

(2)編輯窗口:在該窗口中,用戶既可以編輯源程序,又可以設(shè)置斷點(diǎn)、探測點(diǎn)調(diào)試程序。

(3)反匯編窗口:用來幫助用戶查看機(jī)器指令,查找錯(cuò)誤。

(4)內(nèi)存和寄存器顯示窗口:可以查看、編輯內(nèi)存單元和寄存器。

(5)圖形顯示窗口:可以根據(jù)用戶需要,以圖形的方式顯示數(shù)據(jù)。用戶可通過主菜單選項(xiàng)管理各窗口。除了編輯窗口外,所有其他窗口和工具條均可移動(dòng),用戶可以將窗口或工具條拖拽到所喜歡的位置,甚至可以移出界面,放到桌面的任何位置。移動(dòng)的方法很簡單,用鼠標(biāo)左鍵按住移動(dòng)窗口的標(biāo)題或工具條進(jìn)行拖拽即可完成移動(dòng)。若要將一個(gè)窗口移動(dòng)到界面之外,首先把鼠標(biāo)放在要移動(dòng)的窗口中,單擊右鍵彈出關(guān)聯(lián)菜單,選擇“AllowDocking”選項(xiàng),激活移動(dòng)的窗口。然后鼠標(biāo)放在要移動(dòng)窗口的標(biāo)題上,按左鍵拖拽該窗口即可。也可直接用鼠標(biāo)左鍵拖拽移動(dòng)窗口的邊框,將其移出界面外。7.4.6主菜單主菜單中的各選項(xiàng)如圖7.8所示,由文件File、編輯Edit、查看View、項(xiàng)目Project、調(diào)試Debug、性能Profiler、選項(xiàng)Option、擴(kuò)展功能GEL、工具Tools、視窗Window和幫助Help等選項(xiàng)組成,共有11個(gè)選項(xiàng)。有關(guān)各選項(xiàng)的詳細(xì)信息,請查閱CC幫助文件中的“Commands”內(nèi)容。其功能見表7.2所述,并對每個(gè)菜單的具體內(nèi)容作了詳細(xì)的描述。圖7.8CC主菜單

表7.2主菜單功能介紹

(1)?File菜單。File菜單提供了與文件操作有關(guān)的命令。除“Open”、“Save”、“Print”、“Eixt”等常見的命令外,該菜單還列出了其他文件操作命令,如表7.3所示。表7.3File菜單

(2)?Edit菜單。Edit菜單提供的是與編輯有關(guān)的命令。除“Undo”、“Redo”、“Delete”、“SelectAll”、“Find”、“Replace”等常用的文件編輯命令外,CC還支持其他編輯命令,如表7.4所示。表7.4Edit菜單

(3)?View菜單。View菜單可以選擇是否顯示“Standard”、“GEL”、“Project”、“Debug”、“Editor”工具欄和狀態(tài)欄。此外,“View”菜單中還包括如表7.5所示的命令。表7.5View菜單

(4)?Project菜單。CC使用工程來管理設(shè)計(jì)文檔。CC不允許直接對匯編或C源文件Build生成DSP應(yīng)用程序,只有在建立工程文件情況下“Project”工具欄上的“Build”按鈕才會(huì)生效。工程文件被存盤為.mak文件。在“Project”菜單中包含一些常見的命令,如“New”、“Open”和“Close”等。此外還包括如表7.6所示的菜單命令表7.6Project菜單

(5)?Debug菜單。Debug菜單顯示常用的調(diào)試命令,如表7.7所示。表7.7Debug菜單續(xù)表

(6)?Profiler菜單。剖切(Profiling)是CC的一個(gè)重要功能。它可提供程序代碼特定區(qū)域的執(zhí)行統(tǒng)計(jì),從而使開發(fā)設(shè)計(jì)人員能檢查程序的性能,進(jìn)而可對源程序進(jìn)行優(yōu)化設(shè)置。使用剖切功能可以觀察CPU算法占用了多少CPU時(shí)間,還可以用來剖切處理器的其它事件,如分支數(shù)、子程序調(diào)用次數(shù)及中斷發(fā)生次數(shù)等。表7.8列出了Profiler各菜單命令。表7.8Profiler菜單

(7)?Option菜單。Option菜單提供CC的一些設(shè)置選項(xiàng),如顏色、字體和鍵盤等。表7.9列出了幾種較為重要的“Option”菜單命令。表7.9Option菜單

(8)?GEL菜單。擴(kuò)展功能菜單(GEL)僅在加載了GEL文件后有效。

(9)?Tools菜單。Tools菜單提供常用的工具集。在CC中,只有“CommandWindow”一項(xiàng)。單擊后出現(xiàn)一個(gè)窗口,可以在里面輸入調(diào)試器所需的命令。鍵入的命令遵循TI調(diào)試器命令語法格式。由于許多命令都接受C表達(dá)式作為命令參數(shù),從而使得指令集相對較小且功能較強(qiáng)。在命令窗口中鍵入“HELP”并回車將彈出幫助窗口,從中可得到命令窗口支持的調(diào)試命令列表。

(10)?Window菜單。同其他Window應(yīng)用軟件一樣,CC在“Window”菜單中提供了窗口的疊層、平鋪、圖標(biāo)重排等幾種窗口排列管理方式,此外在該菜單中還可選擇需要的窗口作為當(dāng)前活動(dòng)的窗口。

(11)Help菜單。在CC的幫助菜單中提供了對CC軟件界面和各項(xiàng)功能的簡要介紹、TMS320C3x/C4xDSP芯片匯編語言集以及CPU所有寄存器的列表,使用起來非常方便。7.4.7常用工具條

CC將主菜單中常用的命令篩選出來,形成四類工具條:標(biāo)準(zhǔn)工具條、編輯工具條、項(xiàng)目工具條和調(diào)試工具條。用戶可以單擊工具條上的按鈕執(zhí)行相應(yīng)的操作。

1.標(biāo)準(zhǔn)工具條

啟動(dòng)CC后會(huì)自動(dòng)顯示標(biāo)準(zhǔn)工具條,如圖7.9所示??赏ㄟ^選擇主菜單“View”中的“StandardToolbar”選項(xiàng),打開或關(guān)閉標(biāo)準(zhǔn)工具條。圖7.9標(biāo)準(zhǔn)工具條在標(biāo)準(zhǔn)工具條中有以下14個(gè)按鈕:

·New:創(chuàng)建文件按鈕。用來創(chuàng)建新文件。

·?Open:打開文件按鈕。用來打開已有的文件。

·?Save:保存文件按鈕。用來保存當(dāng)前窗口中的文件。

·?Cut:剪切按鈕。用來剪切文本,將標(biāo)記文本放入剪貼板。

·?Copy:復(fù)制按鈕。用來復(fù)制文本,將標(biāo)記文本放入剪貼板。

·?Paste:粘貼按鈕。用來粘貼文本,將剪貼板中的文本粘貼在光標(biāo)處。

·?Undo:撤消按鈕。用于撤消最后的編輯活動(dòng)。

·?Redo:恢復(fù)按鈕。用于恢復(fù)最后撤消的活動(dòng)。

·?FindNext:向下搜索按鈕。用來查找光標(biāo)所在處下一個(gè)要搜索的字符串。

·?FindPrevious:向上搜索按鈕。用來查找光標(biāo)所在處前一個(gè)要搜索的字符串。

·?SearchWord:搜索文本段按鈕。將加亮顯示的文本段作為搜索文本,單擊該按鈕,窗將移動(dòng)到該段下一個(gè)出現(xiàn)的位置。

·?FindinFiles:搜索多個(gè)文件按鈕。用來搜索多個(gè)文件或指定的文本。

·?Print:打印文件按鈕。用來打印當(dāng)前窗口的源文件。

·?Help:幫助按鈕。可為用戶提供上下文相關(guān)的幫助。

2.編輯工具條

CC啟動(dòng)后,將自動(dòng)顯示編輯工具條??赏ㄟ^主菜單“View”,選擇“EditToolbar”來打或關(guān)閉編輯工具條。編輯工具條共計(jì)10個(gè)按鈕,如圖7.10所示。圖7.10編輯工具條

·MarkTo:設(shè)置括號標(biāo)志按鈕。從光標(biāo)所在處開始,查找括號對,并標(biāo)記括號對中的文本。

·MarkNext:查找下一個(gè)開括號按鈕。找到后,標(biāo)記與之對應(yīng)的閉括號內(nèi)的文本。通常用于搜索嵌入的括號塊。

·?FindMatch:查找匹配括號按鈕。用來尋找匹配的閉括號。

·?FindNextOpen:查找下一個(gè)開括號按鈕。用來尋找下一個(gè)開括號。

·?OutdentMarkedText:左移制表位按鈕。將選定的文本塊左移一個(gè)Tab鍵。

·?IndentMarkedText:右移制表位按鈕。將選定的文本塊右移一個(gè)Tab鍵。

·?EditToggleBookmark:設(shè)置或取消書簽按鈕。用來為當(dāng)前文件設(shè)置或刪除書簽。若沒書簽,則在光標(biāo)所在行創(chuàng)建書簽,否則刪除書簽。

·?EditNextBookmark:查找下一個(gè)書簽按鈕。在當(dāng)前文件光標(biāo)所在處,查找下一個(gè)書簽。

·?EditPreviousBookmark:查找上一個(gè)書簽按鈕。在當(dāng)前文件光標(biāo)所在處,查找上一個(gè)書簽。

·?EditBookmarks:書簽屬性設(shè)置按鈕。用來編輯書簽屬性。

3.項(xiàng)目工具條項(xiàng)目工具條也稱工程項(xiàng)目工具條,它提供了與工程項(xiàng)目和斷點(diǎn)設(shè)置有關(guān)的命令,主要用于建工程項(xiàng)目,完成對斷點(diǎn)、探測點(diǎn)和評價(jià)點(diǎn)的操作等。工程項(xiàng)目工具條如圖7.11所示。其各按鈕的功能如下。圖7.11工程項(xiàng)目工具條

·?CompileFile:編譯文件按鈕。用來編譯當(dāng)前的源文件,但不進(jìn)行鏈接。

·?Incrementalbuild:增加構(gòu)建按鈕。用來生成當(dāng)前工程項(xiàng)目的可執(zhí)行文件,僅對上次生成后改變了的文件進(jìn)行編譯。

·?RebuildAll:全部重新構(gòu)建按鈕。用來重新編譯當(dāng)前工程項(xiàng)目中的所有文件,并重新鏈接形成輸出文件。

·?StopBuild:停止構(gòu)建按鈕。用于停止正在構(gòu)建的工程項(xiàng)目。

·?ToggleBreakpoint:設(shè)置斷點(diǎn)按鈕。用來在編輯窗口中的源文件或反匯編指令中設(shè)置斷點(diǎn)。

·?RemoveAllBreakpoints:刪除所有斷點(diǎn)按鈕。用來刪除全部斷點(diǎn)。

·?ToggleProbePoint:設(shè)置探測點(diǎn)按鈕。用來設(shè)置探測點(diǎn)。

·?RemoveAllProbePoints:刪除所有探測點(diǎn)按鈕。用來刪除全部探測點(diǎn)。

·?ToggleProfilePoint:設(shè)置評價(jià)點(diǎn)按鈕。用來在源文件或反匯編窗口中設(shè)置評價(jià)點(diǎn)。

·?RemoveAllProfilePoints:刪除所有評價(jià)點(diǎn)按鈕。用來刪除全部評價(jià)點(diǎn)。

4.調(diào)試工具條

在CC開發(fā)環(huán)境中,提供了多種調(diào)試程序的操作方法。這些操作方法都是以工具按鈕的形式存放在調(diào)試工具條中。調(diào)試工具條如圖7.12所示。圖7.12調(diào)試工具條

·StepInto:單步進(jìn)入按鈕。在調(diào)試程序中,完成單步進(jìn)入執(zhí)行操作。

·?StepOver:單步執(zhí)行按鈕。用于單步執(zhí)行在當(dāng)前函數(shù)中的單條語句。

·?StepOut:單步跳出按鈕。在調(diào)試過程中,用于子程序的執(zhí)行操作。該條命令能直接從當(dāng)前子程序的位置自動(dòng)執(zhí)行后續(xù)的程序,直到返回到調(diào)用該子程序的指令。

·?RuntoCursor:執(zhí)行到光標(biāo)處按鈕。在調(diào)試過程中,從當(dāng)前位置執(zhí)行程序,直到遇到反匯編窗口中的光標(biāo)位置為止。

·?Run:運(yùn)行程序按鈕。從當(dāng)前

PC位置開始執(zhí)行程序,直到遇到斷點(diǎn)后停止。

·?Halt:暫停程序按鈕。用來暫停正在執(zhí)行的程序。

·?Animate:動(dòng)畫執(zhí)行按鈕。這是一個(gè)在斷點(diǎn)支持下調(diào)試程序的命令。在執(zhí)行前先設(shè)置好各斷點(diǎn),每按一次該按鈕,就會(huì)從當(dāng)前程序位置執(zhí)行到下一個(gè)斷點(diǎn)處。連續(xù)按按鈕就可以實(shí)現(xiàn)動(dòng)畫運(yùn)行。

·?QuickWatch:快速觀察按鈕。用來打開快速觀察窗口(QuickWatch),查看和修改變量。

·?WatchWindow:觀察窗口按鈕。用來打開觀察窗口(WatchWindow),監(jiān)視局部變量和全局變量的值。

·?ViewRegisters:觀察寄存器按鈕。用來顯示寄存器觀察窗口(Registers),觀察和修改寄存器。

·?ViewMemory:觀察存儲(chǔ)器按鈕。用來打開存儲(chǔ)器窗口選項(xiàng)(MemoryWindow)。7.4.8CC開發(fā)軟件應(yīng)用舉例本節(jié)首先簡要地介紹CC軟件開發(fā)流程,然后結(jié)合一個(gè)實(shí)例來演示如何在CC環(huán)境下開發(fā)DSP程序。

1.CC開發(fā)流程CC為用戶提供了環(huán)境配置、源文件編輯、程序調(diào)試、跟蹤和分析等工具,極大地方便了DSP程序的設(shè)計(jì)與開發(fā),用戶可以在一個(gè)軟件環(huán)境下完成編輯、編譯鏈接、調(diào)試和數(shù)據(jù)分析等工作。利用CC集成環(huán)境開發(fā)應(yīng)用程序的流程如圖7.13所示。圖7.13CC的軟件開發(fā)流程利用CC開發(fā)應(yīng)用程序的步驟如下。

(1)軟件設(shè)計(jì)。主要包括程序模塊的劃分、算法和流程的確定以及執(zhí)行結(jié)果的預(yù)測等工作。

(2)程序編輯和編譯鏈接。主要進(jìn)行工程文件的創(chuàng)建,編寫頭文件、配置文件和源程序,使用匯編和C編譯器進(jìn)行編譯,排除語法、變量定義等錯(cuò)誤。

(3)程序調(diào)試。利用CC軟件的調(diào)試工具,采用單步執(zhí)行、設(shè)置斷點(diǎn)和探測點(diǎn)等手段對應(yīng)用程序進(jìn)行調(diào)試。

(4)結(jié)果分析。利用CC軟件提供的分析工具,對應(yīng)用程序運(yùn)行的結(jié)果進(jìn)行分析,如圖形顯示數(shù)據(jù)或統(tǒng)計(jì)運(yùn)行時(shí)間等。若算法不能滿足要求,則需重新進(jìn)行軟件設(shè)計(jì)。充分利用CC所提供的功能,可以幫助用戶高效地開發(fā)DSP應(yīng)用系統(tǒng)。

2.CC應(yīng)用舉例

下面結(jié)合一個(gè)簡單的信號處理程序來演示一下DSP程序的開發(fā)和調(diào)試過程。為了便于學(xué)習(xí),將c:\tic3x4x\tutorial下的volume1文件夾(包括文件夾內(nèi)的所有文件)復(fù)制到c:\tic3x4x\myprojects目錄下,并刪除volume1文件夾中的volume.mak(工程項(xiàng)目文件)。

1)創(chuàng)建工程項(xiàng)目一般在CC環(huán)境下開發(fā)DSP程序,需要先建立一個(gè)工程項(xiàng)目文件,然后將編寫好的源程序文件(.c或?.asm文件)、鏈接命令文件(.cmd文件)和庫文件(.lib文件)添加到工程項(xiàng)目中。具體操作步驟如下。

(1)雙擊CC4.10圖標(biāo),進(jìn)入CC集成開發(fā)環(huán)境。

(2)創(chuàng)建一個(gè)新的工程項(xiàng)目。單擊菜單中的“Project”項(xiàng),選擇New命令,出現(xiàn)如圖8.14所示的對話框。確定工程項(xiàng)目目錄,輸入新建工程項(xiàng)目名volume.mak。當(dāng)工程項(xiàng)目建立后,單擊工程項(xiàng)目管理窗口的Project目錄,將出現(xiàn)volume.mak項(xiàng)目。圖7.14保存新工程項(xiàng)目對話框

(3)將源程序文件、庫文件和頭文件(.h文件)添加到工程項(xiàng)目中。在“Project”菜單下,選擇“AddFilestoProject”命令,出現(xiàn)類似圖7.14的對話框。將C源文件volume.c、匯編源文件load.asm和vector.asm、鏈接命令文件volume.cmd和C語言標(biāo)準(zhǔn)庫文件,如rts30.lib(rts30.lib,在安裝盤tic3xc4x\c3x4x\cgtool\lib目錄下)添加到工程項(xiàng)目volume.mak下。一般情況下,CC會(huì)自動(dòng)添加到源程序中包含的頭文件。若編寫的源文件不含有C源程序,則不需要頭文件和庫文件。

(4)觀看volume.mak工程項(xiàng)目所包含的文件。在工程項(xiàng)目管理窗口中,單擊所有的“+”項(xiàng),展開此工程所包含的文件,如圖7.15所示。

(5)查看源文件和鏈接命令文件。在工程項(xiàng)目窗口中,分別雙擊圖8.15中的文件名,可打開文件。在打開的文件中,可進(jìn)行文件的編輯和修改。圖7.15工程項(xiàng)目管理窗口

2)工程項(xiàng)目的編譯工程項(xiàng)目建立后,可進(jìn)行編譯鏈接,其方法如下:

(1)打開已建的過程項(xiàng)目。進(jìn)入CC開發(fā)環(huán)境后,選擇“Project”菜單中的“Open”命令,出現(xiàn)“ProjectOpen”對話框,選擇volume.mak文件,單擊“打開”按鈕。

(2)工程項(xiàng)目的編譯鏈接。選擇“Project”菜單下的“Rebuildall”命令,將在“Output”窗口顯示運(yùn)行信息。若編譯鏈接沒有錯(cuò)誤,將生成volume.out文件,完成工程項(xiàng)目的編譯鏈接。若出現(xiàn)錯(cuò)誤,可根據(jù)提供的錯(cuò)誤信息,對源程序進(jìn)行修改,然后重新編譯,直到編譯成功,生成volume.out文件。

3)設(shè)置探測點(diǎn)工程項(xiàng)目編譯鏈接,生成volume.out文件后,可在源程序或反匯編程序中設(shè)置探測點(diǎn),并將探測點(diǎn)與數(shù)據(jù)文件鏈接。

(1)將volume.out文件裝入目標(biāo)板。編譯成功后,選擇{“File”菜單中的“LoadProgram”命令,彈出“LoadProgram”對話框,選中volume.out文件,然后單擊“打開”按鈕,將程序裝載到DSP

溫馨提示

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

最新文檔

評論

0/150

提交評論