dsp程序編寫和調(diào)試環(huán)境_第1頁(yè)
dsp程序編寫和調(diào)試環(huán)境_第2頁(yè)
dsp程序編寫和調(diào)試環(huán)境_第3頁(yè)
dsp程序編寫和調(diào)試環(huán)境_第4頁(yè)
dsp程序編寫和調(diào)試環(huán)境_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1dsp程序編寫和調(diào)試環(huán)境4.1偽指令及相關(guān)概念1.偽指令\宏指令\匯編指令偽指令(Directives)是在匯編和連接的時(shí)候提供控制信息和數(shù)據(jù),并不產(chǎn)生目標(biāo)代碼。宏指令(MacroDirectives)用戶自己創(chuàng)建的指令,在匯編時(shí)將其展開并匯編為對(duì)應(yīng)的目標(biāo)代碼。如看門狗。匯編指令(AssemblerDirectives)在匯編時(shí)將產(chǎn)生一一對(duì)應(yīng)的目標(biāo)代碼。一.相關(guān)概念第1頁(yè)/共35頁(yè)2.段\頁(yè)段:目標(biāo)文件的最小單位稱為段,它是在存儲(chǔ)器中占有連續(xù)空間的代碼塊或數(shù)據(jù)塊。頁(yè):64K的數(shù)據(jù)存儲(chǔ)器可以分為512個(gè)數(shù)據(jù)頁(yè),每頁(yè)的大小是128字。3.輸出段在SECTIONS偽指令描述的輸出文件中定義的段,這些段被定義好了內(nèi)容以及怎么被分配。4.源列表文件將源文件進(jìn)行匯編,在產(chǎn)生目標(biāo)文件的同時(shí),還可以產(chǎn)生源列表文件。它是在匯編器對(duì)源程序進(jìn)行匯編后產(chǎn)生的目標(biāo)代碼和源語(yǔ)句的列表文件??梢詢?yōu)化編譯器輸出。第2頁(yè)/共35頁(yè)5.宏定義與子程序的區(qū)別宏定義

為了簡(jiǎn)化匯編語(yǔ)言源程序的書寫,通常把一些出現(xiàn)較為頻繁的程序段定義為宏指令,當(dāng)程序需要被執(zhí)行時(shí),只需要一條宏調(diào)用語(yǔ)句。使用宏指令的優(yōu)點(diǎn)在于可以有效的縮短源程序的長(zhǎng)度,節(jié)省代碼占用內(nèi)存空間,使得代碼易讀,同時(shí)減少了重復(fù)書寫引起的錯(cuò)誤。子程序

是一個(gè)程序段,在程序中通過跳轉(zhuǎn)指令調(diào)用,在每次調(diào)用的時(shí)候,都需要把整個(gè)子程序復(fù)制到內(nèi)存中運(yùn)行,占用更多的內(nèi)存空間。6.SPC(SectionProgramCounters)匯編器為每個(gè)段保留一個(gè)獨(dú)立的程序計(jì)數(shù)器(SPC),匯編器從0地址開始處理每一個(gè)段,同一個(gè)段均按順序存放。連接器根據(jù)每個(gè)段在內(nèi)存圖的最后位置進(jìn)行再定位。第3頁(yè)/共35頁(yè)二.偽指令的功能偽指令的功能包括:1.把代碼和數(shù)據(jù)匯編到指定的段。2.為未定義的變量保存空間。3.控制列表(LIST)文件。4.分配存儲(chǔ)器。5.匯編條件塊。6.定義全局變量。7.指定匯編器能得到的宏。8.檢查符號(hào)調(diào)試信息。第4頁(yè)/共35頁(yè)三.偽指令的分類1.段定義偽指令:把匯編程序的各個(gè)部分與適當(dāng)?shù)亩危〝?shù)據(jù)塊或程序塊)聯(lián)系起來(lái)。.bss,.data,.text,.sect,.usect;2.初始化常數(shù)偽指令:在當(dāng)前段中匯編數(shù)值。.bes,.space,.byte,.field,.float,.bfloat,.int.word,.long,.blong,.string;3.段程序計(jì)數(shù)器排列偽指令:使段程序計(jì)數(shù)器SPC指向預(yù)定的位置(例如頁(yè)邊界)。.align,.even;第5頁(yè)/共35頁(yè)4.引用其他文件偽指令:提供或者獲取文件的信息。.copy,.include,.global,.def,.ref,.mlib;5.條件匯編偽指令:.if,.elseif,.else,.endif,.loop,.break,.endloop;6.匯編時(shí)的符號(hào)偽指令:把自定義的符號(hào)等同于常數(shù)值或者字符串;.asg,.eval,.set,.equ,.struct,.endstruct,.newblock7.其他偽指令:.end,.label,.mmregs,.port,.sblock,.version,.emsg,.wmsg;第6頁(yè)/共35頁(yè)四.常用的偽指令的講解1.align用途:.align偽指令重置短程序計(jì)數(shù)器(SPC),使其指向下一個(gè)頁(yè)邊界,以保證后面的代碼從一個(gè)數(shù)據(jù)頁(yè)開始。匯編器將原頁(yè)中間的未用空間用含NOP指令的字填充,一直填到該頁(yè)邊界。例5.10000 SPLK#0,AX ;0頁(yè):0000~0079H0080 .align ;從下一頁(yè)00080H開始0080 … 0081 … 0082 … 0100 .align ;從下一頁(yè)00100H開始0100 SPLK#0,BX新的一頁(yè)第7頁(yè)/共35頁(yè)2

.word,.int把一個(gè)或多個(gè)16位的值存儲(chǔ)在當(dāng)前段連續(xù)的字中。例:

.word0FFFFH.word0FFFFH.word0FFFFH

第8頁(yè)/共35頁(yè)3.bss

用法:

.bss符號(hào),字長(zhǎng)[,塊標(biāo)志].bss

該指令表示在RAM中保留空間。(1)符號(hào)是一個(gè)必要參數(shù),它指向.bss保留空間的第一個(gè)地址。(2)字長(zhǎng)也是必需參數(shù),它是一個(gè)絕對(duì)表達(dá)式,表示匯編器在.bss段內(nèi)分配多個(gè)字。(3)塊標(biāo)志是可選參數(shù),如果不指定塊標(biāo)志或指定為0,則匯編器在當(dāng)前.bss段SPC處分配空間;如果塊標(biāo)志為1,則匯編器將檢查當(dāng)前SPC和頁(yè)邊界之間是否有足夠的空間為變量分配,若有就連續(xù)分配,若無(wú)就從下頁(yè)開始分配。第9頁(yè)/共35頁(yè)4.copy,.include

當(dāng)匯編器遇到.copy和.include偽指令時(shí),將停止匯編當(dāng)前的源文件語(yǔ)句,而去編譯.copy和.include文件中的語(yǔ)句,然后繼續(xù)匯編.copy和.include后開始的源文件語(yǔ)句。

.copy,.include告訴編譯器從其他文件中讀入源語(yǔ)句。區(qū)別在于:.copy讀入的源語(yǔ)句將在列表文件中列出,而.include偽指令讀入的不在列表文件中列出。5.data,.text .data:是數(shù)據(jù)段定義偽指令。它告訴匯編器把源代碼匯編到.data段中,且.data成為當(dāng)前段。該段通常用來(lái)存放數(shù)據(jù)表或初始化前的變量。

.text:定義.text段中的代碼部分,該部分為可執(zhí)行代碼。.text段是默認(rèn)段,若匯編開始不指定其他段,就自動(dòng)匯編到該段。第10頁(yè)/共35頁(yè)6.title用法:.title“字符串” 該偽指令為每一頁(yè)輸出列表文件打印標(biāo)題(字符串的內(nèi)容)。字符串不能超過65個(gè)字符,匯編器在隨后的頁(yè)面中打印出標(biāo)題。其作用是生成標(biāo)志符號(hào),方便通過用反匯編器結(jié)合.title所定義字符串來(lái)觀察生成的*.out文件的代碼。7.def,.ref,.global .def,.ref,.global偽指令所指定的符號(hào)為全局符號(hào),這些全局符號(hào)可以在外部定義或在外部被引用。

.def指定在當(dāng)前模塊中定義且可以在其他模塊中使用的符號(hào)。匯編器將該符號(hào)引入符號(hào)表。

.ref指定一個(gè)或多個(gè)在當(dāng)前模塊中使用但在其他模塊中定義的符號(hào)。一般與.def定義的符號(hào)對(duì)應(yīng)。匯編器將該符號(hào)標(biāo)記為未定義的外部符號(hào)放入目標(biāo)符號(hào)表,由連接器在連接時(shí)處理該符號(hào)的定義。

.global同時(shí)具備.def,.ref的功能,需要時(shí)可代替它們。第11頁(yè)/共35頁(yè)8.usect .sect,8.1

.usect用法: 符號(hào)名

.usect“段名”,字長(zhǎng)[,塊邊界] .usect為一個(gè)未命名段中的變量保留空間。類似.bss偽指令(都為保留空間,但.usect可以在內(nèi)存中任意定義,而.bss則是獨(dú)立的)。(1)符號(hào)名指向.usect指定的第一個(gè)單元,它代表所預(yù)留空間的變量名。(2)段名告訴編譯器從哪一個(gè)命名段開始保留空間。段名放在雙引號(hào)內(nèi),前8個(gè)字符有效。(3)字長(zhǎng)定義了該段保留的字?jǐn)?shù)空間,可以用表達(dá)式表示。(4)塊邊界為可選項(xiàng),如果為非0,則改段為分塊段。表示在進(jìn)行地址分配時(shí),盡量不超過一頁(yè),若超過一頁(yè)時(shí),則從另一頁(yè)的邊界開始。用.usect對(duì)同一段名重復(fù)定義,可以將連續(xù)存放在存儲(chǔ)器的若干變量定義在同一個(gè)段內(nèi)。第12頁(yè)/共35頁(yè)本例中用.usect偽指令定義兩個(gè)未初始化的命名段var1和var2。符號(hào)ptr和array分別指向var1段內(nèi)1個(gè)字和100個(gè)字的第一個(gè)字。dflag指向var1段中50個(gè)字塊中的第一個(gè)字。

vec指向var2段中50個(gè)字塊中的第一個(gè)字。.usect執(zhí)行之后的存儲(chǔ)器分布示意圖第13頁(yè)/共35頁(yè)8.2.sect用法:.sect “段名”定義初始化命名段。段名必須用引號(hào)引起。該段中可包括代碼或者數(shù)據(jù),類似于.text和.data。9.set偽指令: 用法:符號(hào).set數(shù)值.set定義的符號(hào)在符號(hào)表中,不能重復(fù)定義。在數(shù)值表達(dá)式中的符號(hào)必需事先定義。用.def或.global可以使用由.set定義的符號(hào)被其他模塊調(diào)用。例: IMR.set0004h;InterruptMaskRegister

IFR.set0006h;InterruptFlagRegister 第14頁(yè)/共35頁(yè)10.byte,.float,.bfloat,.int,.word,.long,.blong,.string,.field10.1.byte用法:[標(biāo)號(hào)].byte數(shù)值1[,數(shù)值2,……].byte指令將一個(gè)或者多個(gè)8位的值植入當(dāng)前段的連續(xù)字中。數(shù)值可以是常數(shù),表達(dá)式,字符串。使用標(biāo)號(hào)的時(shí)候,匯編器指向第一個(gè).byte位置。每個(gè).byte指令可以定義100個(gè)設(shè)置,若有字符串,則總數(shù)值長(zhǎng)度不超過200個(gè)字符。例如:

0100 strx .byte ”ab” 0101 …后面幾個(gè)指令用法也基本類似,但數(shù)據(jù)類型不同。第15頁(yè)/共35頁(yè)五.DSP匯編的工作原理1.匯編編譯連接:結(jié)合圖進(jìn)行講述第16頁(yè)/共35頁(yè)編寫C語(yǔ)言源程序優(yōu)化ANSIC編譯器匯編語(yǔ)言匯編器生成目標(biāo)文件鏈接器生成TMS320匯編文件編寫TMS320匯編源程序宏匯編源文件文檔管理器宏匯編庫(kù)輸出執(zhí)行文件調(diào)試器TMS320目標(biāo)系統(tǒng)寫EEPROM軟件仿真軟件開發(fā)系統(tǒng)評(píng)測(cè)模塊EVM系統(tǒng)仿真XDS軟件系統(tǒng)設(shè)計(jì)框圖第17頁(yè)/共35頁(yè)2.COFF文件格式:CommonObjectFileFormat

使用匯編器可以將匯編語(yǔ)言源程序匯編成為目標(biāo)文件,用連接器將若干個(gè)目標(biāo)文件連接成一個(gè)可以被TMS320C1X/C2000/C5X芯片執(zhí)行的可執(zhí)行文件。這些目標(biāo)文件的格式稱為通用目標(biāo)文件格式COFF。

COFF文件總包括3個(gè)默認(rèn)的段: 文本段(.text):通常包括可執(zhí)行代碼。 數(shù)據(jù)段(.data):通常包括已初始化的數(shù)據(jù)。 預(yù)留段(.bss):通常保留用于未初始化變量的空間。第18頁(yè)/共35頁(yè)目標(biāo)文件(.obj)中段Section與目標(biāo)內(nèi)存之間的關(guān)系第19頁(yè)/共35頁(yè)4.2簡(jiǎn)單的程序設(shè)計(jì)過程在程序設(shè)計(jì)時(shí),一般來(lái)說(shuō)需要進(jìn)行規(guī)范的文件管理,使得源代碼組織清晰易讀,有利于交流和加快開發(fā)的進(jìn)度。1.如果需要在多個(gè)模塊中使用相同的設(shè)置和中斷處理,通常將芯片映射到數(shù)據(jù)空間的寄存器地址及標(biāo)號(hào)、預(yù)置變量和常數(shù)的空間等設(shè)置語(yǔ)句集中在一個(gè)文件中,稱為I/O寄存器頭文件(如F2407REG.h)。2.將定義程序、數(shù)據(jù)和I/O空間地址塊大小和位置的偽指令集中在一個(gè)文件稱為命令文件(如F2407.cmd)。

[以上兩個(gè)合稱為公用文件。]第20頁(yè)/共35頁(yè)3.應(yīng)用程序采用.copy或.include偽指令將I/O寄存器頭文件復(fù)制到應(yīng)用程序中,形成一個(gè)匯編源程序(如delay.asm)。再由匯編器進(jìn)行匯編后生成一個(gè)目標(biāo)文件(如delay.obj),最后連接器把該目標(biāo)文件和命令文件相連接,生成可執(zhí)行文件(如delay.out).第21頁(yè)/共35頁(yè)4.命令文件*.cmd文件的介紹:

TMS320系列芯片的存儲(chǔ)器配置隨應(yīng)用的不同而不同。用鏈接器偽指令MEMORY可以確定目標(biāo)系統(tǒng)的各種內(nèi)存配置。當(dāng)MEMORY決定了存儲(chǔ)器模式后,可以用鏈接器偽指令SECTIONS確定連接器組合輸入段的方法和輸出段在存儲(chǔ)器中的位置。第22頁(yè)/共35頁(yè)VECTBLK_B1PMBLK_B2myVARBLK_B0BUFFERSARAM_DCACHEEX2_DMPACKET第23頁(yè)/共35頁(yè)5.1MEMORY偽指令確定在目標(biāo)系統(tǒng)中具有物理位置并且可以被程序使用的存儲(chǔ)器范圍,該指令并不對(duì)存儲(chǔ)器進(jìn)行邏輯配置。TMS320器件具有獨(dú)立的程序存儲(chǔ)器,數(shù)據(jù)存儲(chǔ)器和I/O存儲(chǔ)器空間,連接器允許用戶使用MEMORY偽指令的PAGE選項(xiàng)單獨(dú)配置這些地址空間。第24頁(yè)/共35頁(yè)(1)MEMORY的一般格式:

MEMORY { PAGE0:存儲(chǔ)器名1[(屬性)]:ORIGIN=常數(shù),LENGTH=常數(shù)

. . . PAGEn:存儲(chǔ)器名n[(屬性)]:ORIGIN=常數(shù),LENGTH=常數(shù)

}第25頁(yè)/共35頁(yè)說(shuō)明:1.PAGE:定義一個(gè)存儲(chǔ)空間,用戶可以定義多達(dá)255頁(yè)。PAGE0定義程序存儲(chǔ)器,PAGE1定義數(shù)據(jù)存儲(chǔ)器。每個(gè)PAGE代表一個(gè)完全獨(dú)立的地址空間。在PAGE0上以配置的存儲(chǔ)器可以和在PAGE1上已配置的存儲(chǔ)器重疊。在同一頁(yè)中的存儲(chǔ)器名不能有相同的名字,且不能重疊。2.ORIGIN:指定存儲(chǔ)器區(qū)域的起始地址,可以是16位常數(shù)、十進(jìn)制,八進(jìn)制或者十六進(jìn)制常數(shù)。LENGTH指定存儲(chǔ)器的長(zhǎng)度。第26頁(yè)/共35頁(yè)5.2SECTIONS偽指令:SECTIONS功能:1描述輸入段怎樣被組合到輸出段內(nèi);2定義在執(zhí)行程序中的輸出段;3規(guī)定輸出段在存儲(chǔ)器中的位置;4允許重新命名輸出段;格式:SECTIONS{ 段名1:[特性1,特性2,…]段名1:[特性1,特性2,…] ……}特性列表第27頁(yè)/共35頁(yè)5.2.1SECTIONS偽指令中的特性列表選項(xiàng)有以下幾種:裝載地址:規(guī)定段將被裝載在存儲(chǔ)器中的位置。句法如下:

load

>allocation

或load

{}>allocation

注:allocation是MEMORY偽指令所定義的給輸出段分配存儲(chǔ)單元。具體寫法有很多種:

.text:{}>PMPAGE0.text:>PMPAGE0第28頁(yè)/共35頁(yè)*.cmd文件的例子例:F2407.cmdMEMORY{PAGE0: /*PROGRAMMEMORY*/ VECS :ORIGIN=0000H, LENGTH=0044H PM :ORIGIN=00100H,LENGTH=7000HPAGE1: /*DATAMEMORY*/ BLK_B2 :ORIGIN=0060H, LENGTH=20H /*BlockB2*/ BLK_B0 :ORIGIN=0200H,LENGTH=100H /*BlockB0*/ BLK_B1 :ORIGIN=0300H,LENGTH=100H /*BlockB1*/ SARAM_D :ORIGIN=0800H,LENGTH=0800H /*2KSARAMindataspace*/ EX2_DM :ORIGIN=8000H,LENGTH=8000H /*ExternaldataRAM*/

}第29頁(yè)/共35頁(yè)SECTIONS { vector :{}>VECSPAGE0 /*ASVECTOR

/*ISINCLUDE /*INMAINPROGRAM*//*ItCAN'TBEALLOCATEINCMDFILE*/ .text :{}>PM PAGE0.bss :{}>BLK_B0 PAGE1.data :{}>BLK_B1 PAGE1

myVAR :{}>BLK_B2 PAGE

1

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論