04-DSP軟件開發(fā)PPT_第1頁(yè)
04-DSP軟件開發(fā)PPT_第2頁(yè)
04-DSP軟件開發(fā)PPT_第3頁(yè)
04-DSP軟件開發(fā)PPT_第4頁(yè)
04-DSP軟件開發(fā)PPT_第5頁(yè)
已閱讀5頁(yè),還剩75頁(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)介

1、 DSPDSP技術(shù)技術(shù)04 TMS320C54x DSP04 TMS320C54x DSP軟件開發(fā)軟件開發(fā)DSP技術(shù)講義,2010DSP技術(shù)技術(shù)DSP匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì)DSP匯編程序開發(fā)工具匯編程序開發(fā)工具 DSP高級(jí)高級(jí)C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)DSP程序設(shè)計(jì)與開發(fā)程序設(shè)計(jì)與開發(fā)DSP技術(shù)講義,2010第一部分第一部分DSP匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì)DSP技術(shù)講義,2010 匯編語(yǔ)言程序以匯編語(yǔ)言程序以.asm為擴(kuò)展名,可以用任意的編為擴(kuò)展名,可以用任意的編輯器編寫源文件。一條語(yǔ)句占源程序的一行,匯編器輯器編寫源文件。一條語(yǔ)句占源程序的一行,匯編器每行最多讀每行最多讀20

2、0個(gè)字符。因此,語(yǔ)句的執(zhí)行部分必須個(gè)字符。因此,語(yǔ)句的執(zhí)行部分必須限制在限制在200個(gè)字符以內(nèi)。個(gè)字符以內(nèi)。 DSP技術(shù)講義,2010DSP技術(shù)講義,2010數(shù)據(jù)類型數(shù)據(jù)類型舉舉 例例說(shuō)說(shuō) 明明二進(jìn)制二進(jìn)制1110001b或1110001B八進(jìn)制八進(jìn)制226q或572Q十進(jìn)制十進(jìn)制1234或+1234或-11234缺省型十六進(jìn)十六進(jìn)制制0A40h或0A40H或0 xA40浮點(diǎn)數(shù)浮點(diǎn)數(shù)1.623e-23僅用于C語(yǔ)言字符字符D字符串字符串“this is a string”DSP技術(shù)講義,2010 設(shè)置好堆棧后,就可以使用堆棧了,如:設(shè)置好堆棧后,就可以使用堆棧了,如: CALL pmad CAL

3、L pmad ;(SP)-1SP,(PC)+2TOS(SP)-1SP,(PC)+2TOS,pmadPCpmadPC RET RET ;(TOS)PC,(SP)+1SP(TOS)PC,(SP)+1SPDSP技術(shù)講義,20104.3 匯編器偽指令u將代碼和數(shù)據(jù)匯編進(jìn)指定的段;將代碼和數(shù)據(jù)匯編進(jìn)指定的段;u在存儲(chǔ)器中為未初始化的變量保留空間;在存儲(chǔ)器中為未初始化的變量保留空間;u初始化存儲(chǔ)器;初始化存儲(chǔ)器;u聲明全局變量;聲明全局變量;u為匯編器指定從中可以獲得宏的庫(kù)。為匯編器指定從中可以獲得宏的庫(kù)。匯編偽指令功能匯編偽指令功能DSP技術(shù)講義,20101.定義段的偽指令定義段的偽指令.bss .bs

4、s 為未初始化的數(shù)據(jù)段保留空間(單位為字)為未初始化的數(shù)據(jù)段保留空間(單位為字).data .data 指定指定.data.data后面的代碼為數(shù)據(jù)段后面的代碼為數(shù)據(jù)段.sect .sect 定義初始化的命名段定義初始化的命名段.text .text 指定指定.text.text后面的代碼為文本段后面的代碼為文本段.usect .usect 為未初始化的命名段保留空間為未初始化的命名段保留空間DSP技術(shù)講義,20102.初始化常數(shù)的偽指令初始化常數(shù)的偽指令u.bes 和和.space在當(dāng)前的段中保留指定的位數(shù)在當(dāng)前的段中保留指定的位數(shù)u.byte偽指令在當(dāng)前段中放一個(gè)偽指令在當(dāng)前段中放一個(gè)8位

5、值進(jìn)入連續(xù)的字;位值進(jìn)入連續(xù)的字;u.field 將單個(gè)數(shù)放進(jìn)當(dāng)前字的指定位域?qū)蝹€(gè)數(shù)放進(jìn)當(dāng)前字的指定位域u.float和和.xfloat計(jì)算單個(gè)單精度浮點(diǎn)數(shù),并將其存儲(chǔ)計(jì)算單個(gè)單精度浮點(diǎn)數(shù),并將其存儲(chǔ)在當(dāng)前段的在當(dāng)前段的2個(gè)連續(xù)的字中;個(gè)連續(xù)的字中;, .word 將一個(gè)或多個(gè)將一個(gè)或多個(gè)16位的值放進(jìn)當(dāng)前段的連續(xù)位的值放進(jìn)當(dāng)前段的連續(xù)字中字中, .int 為無(wú)符號(hào)整型為無(wú)符號(hào)整型, .word 為帶符號(hào)整型。為帶符號(hào)整型。u.long , .xlong 把把32位數(shù)存放到當(dāng)前段連續(xù)的兩個(gè)字中。位數(shù)存放到當(dāng)前段連續(xù)的兩個(gè)字中。u.string,.pstring把把8位的字符從一個(gè)或

6、多個(gè)字符串中傳位的字符從一個(gè)或多個(gè)字符串中傳送到當(dāng)前段中。送到當(dāng)前段中。DSP技術(shù)講義,20103. 輸出列表格式偽指令輸出列表格式偽指令u.title 為匯編器提供一個(gè)打印在每一頁(yè)頂部的標(biāo)題。為匯編器提供一個(gè)打印在每一頁(yè)頂部的標(biāo)題。u.list/nolist 重新啟動(dòng)重新啟動(dòng)/停止源程序清單。停止源程序清單。4.引用其他文件的偽指令引用其他文件的偽指令u.copy/.include 從其他文件包括源語(yǔ)句;從其他文件包括源語(yǔ)句;u.def 識(shí)別定義在當(dāng)前和用在其他模塊中的一個(gè)或多個(gè)識(shí)別定義在當(dāng)前和用在其他模塊中的一個(gè)或多個(gè)符號(hào);符號(hào);u.global 定義一個(gè)或多個(gè)全局符號(hào)定義一個(gè)或多個(gè)全局符

7、號(hào) u.mlib 定義宏庫(kù)定義宏庫(kù)u.ref 識(shí)別用在當(dāng)前模塊但定義在其他模塊中的一個(gè)或識(shí)別用在當(dāng)前模塊但定義在其他模塊中的一個(gè)或多個(gè)符號(hào)。多個(gè)符號(hào)。DSP技術(shù)講義,20105. 控制條件匯編的偽指令控制條件匯編的偽指令u.if/.elseif/.else/.endif 條件匯編條件匯編u.loop/.break/.endloop 循環(huán)匯編循環(huán)匯編6. 其他偽指令其他偽指令u.equ/.set 使一個(gè)符號(hào)等于一個(gè)值使一個(gè)符號(hào)等于一個(gè)值u.end 結(jié)束程序結(jié)束程序u有關(guān)偽指令更詳細(xì)的內(nèi)容見有關(guān)偽指令更詳細(xì)的內(nèi)容見TMS320C54x Assembly Language Tools Users G

8、uide. Texas Instruments Inc, June 2001 DSP技術(shù)講義,2010宏語(yǔ)言宏語(yǔ)言 宏宏: : 用戶用戶定義的能被用作指令的程序。定義的能被用作指令的程序。 匯編器支持宏語(yǔ)言,使用戶可匯編器支持宏語(yǔ)言,使用戶可以建立自己的以建立自己的“指令指令”。當(dāng)程序要。當(dāng)程序要將特定的任務(wù)執(zhí)行若干次時(shí),尤其將特定的任務(wù)執(zhí)行若干次時(shí),尤其有用有用。DSP技術(shù)講義,2010宏的使用宏的使用DAT0 .set 60hDAT1 .set 61hDAT2 .set 62hDAT3 .set 63h .textADD3 .macro X1, X2, X3, X_SUM LD X1,A

9、ADD X2,A ADD X3,A STL A, X_SUM .endm ST #0020h, DAT0 ST #0030h, DAT1 ST #1140h, DAT2 ADD3 DAT0, DAT1, DAT2, DAT3 NOP .endDSP技術(shù)講義,2010iiixa41DSP技術(shù)講義,2010續(xù)上表續(xù)上表DSP技術(shù)講義,2010續(xù)上表續(xù)上表DSP技術(shù)講義,2010第二部分第二部分DSP匯編程序開發(fā)工具匯編程序開發(fā)工具DSP技術(shù)講義,2010uTMS320C54x提供提供2種編程語(yǔ)言:種編程語(yǔ)言:匯編語(yǔ)言匯編語(yǔ)言和和C/C+語(yǔ)言語(yǔ)言。對(duì)于完成一般性功能的代碼,這。對(duì)于完成一般性功能的代

10、碼,這2種語(yǔ)言都可以種語(yǔ)言都可以使用,但對(duì)于一些運(yùn)算量很大的關(guān)鍵代碼,最好采用使用,但對(duì)于一些運(yùn)算量很大的關(guān)鍵代碼,最好采用手工編寫的匯編語(yǔ)言來(lái)完成。手工編寫的匯編語(yǔ)言來(lái)完成。uTMS320C54x 提供有提供有2種開發(fā)環(huán)境:種開發(fā)環(huán)境:非集成非集成的開發(fā)環(huán)的開發(fā)環(huán)境和境和集成集成開發(fā)環(huán)境開發(fā)環(huán)境Code Composer Studio,簡(jiǎn)稱,簡(jiǎn)稱CCS。CCS在在WINDOWS操作環(huán)境下運(yùn)行,集成了非集成開操作環(huán)境下運(yùn)行,集成了非集成開發(fā)環(huán)境的所有功能,并擴(kuò)展了許多其他功能。發(fā)環(huán)境的所有功能,并擴(kuò)展了許多其他功能。DSP技術(shù)講義,2010C C源文件源文件C C編譯器編譯器匯編匯編源文件源文

11、件匯編器匯編器匯編匯編源文件源文件COFFCOFF目標(biāo)目標(biāo)文件文件鏈接器鏈接器可執(zhí)行的可執(zhí)行的COFFCOFF文件文件宏宏源文件源文件存檔存檔器器宏庫(kù)宏庫(kù)存檔器存檔器目標(biāo)目標(biāo)文件庫(kù)文件庫(kù)建庫(kù)工具建庫(kù)工具運(yùn)行時(shí)運(yùn)行時(shí)支持庫(kù)支持庫(kù)EPROMEPROM編程器編程器交叉引用交叉引用列表器列表器調(diào)試工具調(diào)試工具TMS320C54xTMS320C54x絕對(duì)地址絕對(duì)地址列表器列表器HEXHEX代碼代碼轉(zhuǎn)換工具轉(zhuǎn)換工具DSP技術(shù)講義,2010.asm源文件源文件.obj目標(biāo)文件目標(biāo)文件.out輸出文件輸出文件. cmd鏈接命鏈接命令文件令文件. lst列表文件列表文件. map存儲(chǔ)器存儲(chǔ)器映像文件映像文件-

12、- o- - m- - lDSP技術(shù)講義,2010DSP技術(shù)講義,2010DSP技術(shù)講義,2010 段是段是COFF文件中最重要的概念。每個(gè)文件中最重要的概念。每個(gè)目標(biāo)文件都分成若干段。目標(biāo)文件都分成若干段。 所謂所謂段段,是指存儲(chǔ)器中占據(jù)相鄰空間的,是指存儲(chǔ)器中占據(jù)相鄰空間的代碼或數(shù)據(jù)塊。一個(gè)目標(biāo)文件中的每個(gè)段都代碼或數(shù)據(jù)塊。一個(gè)目標(biāo)文件中的每個(gè)段都是分開的和各不相同的。是分開的和各不相同的。 DSP技術(shù)講義,2010 COFF目標(biāo)文件都包含以下目標(biāo)文件都包含以下3種形式的段:種形式的段: .text 段段(文本段文本段),通常包含可執(zhí)行代碼;,通常包含可執(zhí)行代碼; .data 段段(數(shù)據(jù)段

13、數(shù)據(jù)段),通常包含初始化數(shù)據(jù);,通常包含初始化數(shù)據(jù); .bss 段段(保留空間段保留空間段),通常為未初始化變,通常為未初始化變量保留存儲(chǔ)空間。量保留存儲(chǔ)空間。DSP技術(shù)講義,20102. 段的基本類型段的基本類型 COFF目標(biāo)文件中的段有兩種基本類型。目標(biāo)文件中的段有兩種基本類型。 初始化段初始化段 未未初始化段初始化段(1) 初始化段初始化段 初始化段中包含有數(shù)據(jù)或程序代碼。主要有:初始化段中包含有數(shù)據(jù)或程序代碼。主要有: .text段段已初始化程序段;已初始化程序段; .data段段已初始化數(shù)據(jù)段;已初始化數(shù)據(jù)段; .sect段段已初始化段,由匯編器偽指令建立的自定義段。已初始化段,由匯

14、編器偽指令建立的自定義段。 DSP技術(shù)講義,2010(2) (2) 未初始化段未初始化段 在存儲(chǔ)空間中,為未初始化數(shù)據(jù)保留存儲(chǔ)空間。在存儲(chǔ)空間中,為未初始化數(shù)據(jù)保留存儲(chǔ)空間。它包括:它包括: . .bssbss段段未初始化段;未初始化段; . .usectusect段段未初始化段,由匯編命令建未初始化段,由匯編命令建立的命名段(自定義段)。立的命名段(自定義段)。DSP技術(shù)講義,2010DSP技術(shù)講義,2010目標(biāo)文件中的段與目標(biāo)存儲(chǔ)器之間的關(guān)系目標(biāo)文件中的段與目標(biāo)存儲(chǔ)器之間的關(guān)系 目標(biāo)文件目標(biāo)文件目標(biāo)存儲(chǔ)器目標(biāo)存儲(chǔ)器.bss.data.textRAME2PROMROMDSP技術(shù)講義,2010

15、 匯編器對(duì)段的處理是通過段偽指令來(lái)區(qū)別各個(gè)匯編器對(duì)段的處理是通過段偽指令來(lái)區(qū)別各個(gè)段的段的,并將段名相同的語(yǔ)句匯編在一起。并將段名相同的語(yǔ)句匯編在一起。 匯編器有匯編器有5條偽指令可識(shí)別匯編語(yǔ)言程序的各條偽指令可識(shí)別匯編語(yǔ)言程序的各個(gè)段:個(gè)段: .bss .usect .text .data .sect定義未初始化段定義未初始化段定義未初始化段定義未初始化段定義已初始化段定義已初始化段定義已初始化段定義已初始化段定義已初始化段定義已初始化段313132323333DSP技術(shù)講義,2010u鏈接器主要完成以下功能鏈接器主要完成以下功能: 將程序中的各段按目標(biāo)系統(tǒng)存儲(chǔ)器配置表將程序中的各段按目標(biāo)系

16、統(tǒng)存儲(chǔ)器配置表(.cmd)進(jìn)行進(jìn)行分配分配; 給符號(hào)和段安排最終地址給符號(hào)和段安排最終地址,完成重定位操作完成重定位操作; 在輸入文件之間辨認(rèn)沒有定義的外部符號(hào)引用。在輸入文件之間辨認(rèn)沒有定義的外部符號(hào)引用。鏈接器的使用鏈接器的使用 lnk500 -option filenamefilename例例: lnk500 file1.obj file2.obj o link.outuTMS320C54x鏈接器把由匯編器產(chǎn)生的鏈接器把由匯編器產(chǎn)生的COFF目標(biāo)文件目標(biāo)文件作作為輸入為輸入,結(jié)合結(jié)合鏈接器命令文件鏈接器命令文件(*.cmd),輸出可執(zhí)行文件。輸出可執(zhí)行文件。DSP技術(shù)講義,2010鏈接器

17、命令文件鏈接器命令文件u目標(biāo)系統(tǒng)存儲(chǔ)器配置和鏈接使用偽指令目標(biāo)系統(tǒng)存儲(chǔ)器配置和鏈接使用偽指令MEMORY和和SECTIONS描述。描述。 MEMORY : 定義目標(biāo)系統(tǒng)存儲(chǔ)器配置定義目標(biāo)系統(tǒng)存儲(chǔ)器配置 SECTIONS : 控制段的構(gòu)成與存儲(chǔ)器分配控制段的構(gòu)成與存儲(chǔ)器分配鏈接器命令文件鏈接器命令文件含有鏈接時(shí)所需的信息。這些信息含有鏈接時(shí)所需的信息。這些信息包括輸入文件名、鏈接時(shí)的參數(shù)選項(xiàng)、目標(biāo)系統(tǒng)存儲(chǔ)包括輸入文件名、鏈接時(shí)的參數(shù)選項(xiàng)、目標(biāo)系統(tǒng)存儲(chǔ)器配置和鏈接信息、全局符號(hào)定義等。器配置和鏈接信息、全局符號(hào)定義等。DSP技術(shù)講義,2010u C54x用戶自己設(shè)計(jì)的系統(tǒng)及存儲(chǔ)器配置各不相同。用戶

18、自己設(shè)計(jì)的系統(tǒng)及存儲(chǔ)器配置各不相同。MEMORY偽指?jìng)沃噶羁墒鼓愠浞置枋龈鱾€(gè)用戶系統(tǒng)的實(shí)際存儲(chǔ)器配置,然后用令可使你充分描述各個(gè)用戶系統(tǒng)的實(shí)際存儲(chǔ)器配置,然后用SECTIONS偽指令去指定各個(gè)段與存儲(chǔ)器配置的分配關(guān)系。偽指令去指定各個(gè)段與存儲(chǔ)器配置的分配關(guān)系。 MEMORY偽指令語(yǔ)法格式如下:偽指令語(yǔ)法格式如下:MEMORYPAGE0: name1(attr):origin=constant, length=constant;fill=constant; . . .PAGEn: namen(attr):origin=constant, length=constant;fill=constant

19、;DSP技術(shù)講義,2010u 如果沒有使用如果沒有使用MEMORY和和SECTIONS定義存儲(chǔ)器空間模型和定義存儲(chǔ)器空間模型和配置,鏈接器對(duì)配置,鏈接器對(duì)C54x使用缺省的存儲(chǔ)器模型和段分配方法。使用缺省的存儲(chǔ)器模型和段分配方法。MEMORY /*MEMORY偽指令偽指令*/PAGE0:PROG:origin=0 x0080 length=0 xFF00PAGE1:DATA:origin=0 x0080 length=0 xFF80SECTIONS /*SECTIONS偽指令偽指令*/.text: PAGE=0.data: PAGE=0.cinit: PAGE=0.bss: PAGE=1DSP

20、技術(shù)講義,2010有關(guān)鏈接命令文件更詳細(xì)的內(nèi)容見有關(guān)鏈接命令文件更詳細(xì)的內(nèi)容見1、TMS320C54x Assembly Language Tools Users Guide. Texas Instruments Inc, June 2001或參考或參考2、TMS320C54x DSP應(yīng)用程序設(shè)計(jì)與應(yīng)用程序設(shè)計(jì)與開發(fā)開發(fā). 劉益成,北京航空航天大學(xué)出版社,劉益成,北京航空航天大學(xué)出版社,2002DSP技術(shù)講義,2010鏈接命令文件的編寫鏈接命令文件的編寫/*鏈接命令文件鏈接命令文件*/*example.cmd*/*/a.obj b.obj c.obj /*輸入文件名輸入文件名*/ -o pro

21、g.out /*輸出輸出out文件文件*/-m prog.mapMEMORY /*MEMORY偽指令偽指令*/RAM:origin=0100h length=0100hROM:origin=0100h length=0100hSECTIONS /*SECTIONS偽指令偽指令*/.text:ROM.data:RAM.bss:RAMDSP技術(shù)講義,2010檔案管理器(檔案管理器(Archiver)u 檔案管理器允許用戶將一組文件歸入一個(gè)單一文件中,這個(gè)單一檔案管理器允許用戶將一組文件歸入一個(gè)單一文件中,這個(gè)單一文件就叫文件就叫庫(kù)庫(kù)或或歸檔文件歸檔文件。 檔案管理器的使用格式:檔案管理器的使用格式

22、:ar500 -command option libname filename1filenamencommand 告訴檔案管理器如何處理庫(kù)告訴檔案管理器如何處理庫(kù)option 告訴檔案管理器如何運(yùn)行告訴檔案管理器如何運(yùn)行l(wèi)ibname 歸檔庫(kù)名,默認(rèn)擴(kuò)展名(歸檔庫(kù)名,默認(rèn)擴(kuò)展名(.lib)filename 獨(dú)立文件名(獨(dú)立文件名(.obj)例例:創(chuàng)建一個(gè)名為創(chuàng)建一個(gè)名為function.lib的庫(kù),它包括文件的庫(kù),它包括文件sine.obj、cos.obj、flt.obj,命令為:,命令為:Ar500 a function sine cos fltDSP技術(shù)講義,2010絕對(duì)列表器絕對(duì)列表器u

23、絕對(duì)列表器是一個(gè)調(diào)試工具。它將鏈接后的目標(biāo)文件作絕對(duì)列表器是一個(gè)調(diào)試工具。它將鏈接后的目標(biāo)文件作為輸入文件,創(chuàng)建擴(kuò)展名為為輸入文件,創(chuàng)建擴(kuò)展名為.abs的文件作為輸?shù)奈募鳛檩敵觥3觥?abs文件顯示目標(biāo)代碼絕對(duì)地址的列表。文件顯示目標(biāo)代碼絕對(duì)地址的列表。 啟動(dòng)絕對(duì)列表器的命令:?jiǎn)?dòng)絕對(duì)列表器的命令: abs500 -option input-file 具體用法可參考具體用法可參考TMS320C54x Assembly Language Tools Users Guide. Texas Instruments Inc, June 2001DSP技術(shù)講義,2010交叉引用列表器交叉引用列表器u交

24、叉引用列表器也是一種調(diào)試工具。鏈接后的可執(zhí)行交叉引用列表器也是一種調(diào)試工具。鏈接后的可執(zhí)行文件作為交叉引用列表器的輸入文件,其輸出文件為文件作為交叉引用列表器的輸入文件,其輸出文件為交叉引用列表文件交叉引用列表文件(.xrf)。此列表文件列出可執(zhí)行文件。此列表文件列出可執(zhí)行文件中符號(hào)、符號(hào)的定義及它們的引用情況。中符號(hào)、符號(hào)的定義及它們的引用情況。 啟動(dòng)交叉引用列表器的命令:?jiǎn)?dòng)交叉引用列表器的命令: xref500 -option input file output filename 具體用法可參考具體用法可參考TMS320C54x Assembly Language Tools Users

25、 Guide. Texas Instruments Inc, June 2001DSP技術(shù)講義,2010十六進(jìn)制轉(zhuǎn)換公用程序十六進(jìn)制轉(zhuǎn)換公用程序uC54x匯編器、鏈接器產(chǎn)生匯編器、鏈接器產(chǎn)生COFF可執(zhí)行文件。可執(zhí)行文件。COFF文文件是件是TI公司的二進(jìn)制格式文件公司的二進(jìn)制格式文件,便于模塊化編程和提,便于模塊化編程和提供靈活、方便的代碼管理及存儲(chǔ)空間管理。供靈活、方便的代碼管理及存儲(chǔ)空間管理。但是但是,大,大多數(shù)多數(shù)EPROM編程器不接收編程器不接收COFF格式文件,因此格式文件,因此TI公公司提供了一個(gè)將司提供了一個(gè)將COFF文件格式轉(zhuǎn)化為文件格式轉(zhuǎn)化為Intel、Tektronix、

26、Motorola-S、ASCII-hex等文件格式的等文件格式的公用程序。公用程序。 啟動(dòng)十六進(jìn)制轉(zhuǎn)換程序的命令:?jiǎn)?dòng)十六進(jìn)制轉(zhuǎn)換程序的命令: hex500 -option filenameDSP技術(shù)講義,2010第三部分DSP高級(jí)高級(jí)C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)DSP技術(shù)講義,2010uTMS320C54x C/C+編譯器支持編譯器支持ANSI(American National Standards Institute)開發(fā)的開發(fā)的C/C+語(yǔ)言標(biāo)準(zhǔn)。語(yǔ)言標(biāo)準(zhǔn)。DSP技術(shù)講義,2010C語(yǔ)言開發(fā)的優(yōu)點(diǎn)語(yǔ)言開發(fā)的優(yōu)點(diǎn)1)便于閱讀,維護(hù),交流;便于閱讀,維護(hù),交流;2)編程更為編程更為容易容易,不是

27、特別精通匯編語(yǔ)言的開,不是特別精通匯編語(yǔ)言的開發(fā)人員也可以編寫;發(fā)人員也可以編寫;3)便于分工合作完成便于分工合作完成子模塊子模塊的編寫,以及由子的編寫,以及由子模塊到模塊到大系統(tǒng)大系統(tǒng)的搭建的搭建 ;4)便于便于移植移植到到C55、C2000、C6000等等DSP系系統(tǒng)中;統(tǒng)中;DSP技術(shù)講義,2010TMS320C54x C編譯器支持的關(guān)鍵詞編譯器支持的關(guān)鍵詞1、const、 volatile 關(guān)鍵詞關(guān)鍵詞 用來(lái)控制數(shù)據(jù)對(duì)象的存儲(chǔ)分配,用來(lái)控制數(shù)據(jù)對(duì)象的存儲(chǔ)分配,const定義的常定義的常數(shù)被分配在數(shù)被分配在ROM中,關(guān)鍵詞中,關(guān)鍵詞volatile定義的數(shù)據(jù)分配定義的數(shù)據(jù)分配在在RAM中

28、。中。 例如定義例如定義ROM表表 const int digits =0,1,2,3,4,5,6,7,8,9 例如定義例如定義RAM中的一個(gè)指向無(wú)符號(hào)整型的指針中的一個(gè)指向無(wú)符號(hào)整型的指針 volatile unsigned int *ctrlDSP技術(shù)講義,20102、ioport 關(guān)鍵詞關(guān)鍵詞 用來(lái)訪問用來(lái)訪問TMS320C54x器件的器件的I/O端口空間端口空間 格式:格式: ioport type porthex_num ioport 指示這是一個(gè)端口變量的關(guān)鍵詞。指示這是一個(gè)端口變量的關(guān)鍵詞。 type(類型)(類型) 必須是必須是char(字符)、(字符)、short(短整數(shù))、

29、(短整數(shù))、int(整數(shù))或無(wú)符號(hào)的變量。(整數(shù))或無(wú)符號(hào)的變量。 porthex_num 指端口編號(hào)。指端口編號(hào)。hex_num變量為十六進(jìn)制數(shù)。變量為十六進(jìn)制數(shù)。DSP技術(shù)講義,2010u 例:例:聲明聲明I/O端口為無(wú)符號(hào)端口端口為無(wú)符號(hào)端口10h,將,將a寫到端口寫到端口10h,然后將端口然后將端口10h讀進(jìn)讀進(jìn)b:ioport unsigned port10; /*訪問訪問I/O端口端口10h的變量的變量*/int func()port10=a; /*將將a寫到端口寫到端口10h*/b=port10; /*將端口將端口10h讀進(jìn)讀進(jìn)b*/u 端口變量的使用對(duì)賦值沒有限制。端口變量可像

30、其他變量端口變量的使用對(duì)賦值沒有限制。端口變量可像其他變量一樣用在表達(dá)式中。一樣用在表達(dá)式中。a=port10+b; /*讀端口讀端口10h,加上,加上b,結(jié)果賦給,結(jié)果賦給a*/prot10+=a; /*讀端口讀端口10h,加上,加上a,結(jié)果寫到端口,結(jié)果寫到端口10h*/DSP技術(shù)講義,20103、interrupt 關(guān)鍵詞關(guān)鍵詞 用來(lái)指定將函數(shù)作為中斷函數(shù)處理。當(dāng)用來(lái)指定將函數(shù)作為中斷函數(shù)處理。當(dāng)C代碼被中斷時(shí),代碼被中斷時(shí),中斷程序必須保存所有寄存器的內(nèi)容。中斷程序必須保存所有寄存器的內(nèi)容。 中斷函數(shù)的主體可具有局部變量并可自由使用堆棧。中斷函數(shù)的主體可具有局部變量并可自由使用堆棧。

31、interrupt void int_handler() unsigned int flags; C_int00 是是C/C+的進(jìn)入點(diǎn),為系統(tǒng)復(fù)位中斷保留,該中的進(jìn)入點(diǎn),為系統(tǒng)復(fù)位中斷保留,該中斷程序初始化系統(tǒng)并調(diào)用函數(shù)斷程序初始化系統(tǒng)并調(diào)用函數(shù)main。DSP技術(shù)講義,2010 interrupt double compute_area (double radius) double area = PI * radius * radius;printf(nArea = %f, area);return area;u ISR 不能返回一個(gè)值。不能返回一個(gè)值。 u ISR 不能傳遞參數(shù)。不能傳遞參

32、數(shù)。 u C編譯器不允許在編譯器不允許在ISR中做浮點(diǎn)運(yùn)算。中做浮點(diǎn)運(yùn)算。 下面是一個(gè)錯(cuò)誤的程序:下面是一個(gè)錯(cuò)誤的程序:DSP技術(shù)講義,2010面向面向DSP的的C程序設(shè)計(jì)準(zhǔn)則程序設(shè)計(jì)準(zhǔn)則 面向面向DSP的的C程序設(shè)計(jì)程序設(shè)計(jì)基本原則基本原則:C程序不但需要對(duì)數(shù)據(jù)流進(jìn)程序不但需要對(duì)數(shù)據(jù)流進(jìn)行編程,也要對(duì)時(shí)序機(jī)制進(jìn)行編程。行編程,也要對(duì)時(shí)序機(jī)制進(jìn)行編程。通用通用PC的的C程序程序u 大量數(shù)據(jù)集中式處理大量數(shù)據(jù)集中式處理u 數(shù)據(jù)流處理數(shù)據(jù)流處理u 非實(shí)時(shí)非實(shí)時(shí)u 直觀的輸入、輸出設(shè)備,運(yùn)直觀的輸入、輸出設(shè)備,運(yùn)行結(jié)果無(wú)需借助其他設(shè)備行結(jié)果無(wú)需借助其他設(shè)備u 數(shù)據(jù)來(lái)源可由軟件仿真產(chǎn)生,數(shù)據(jù)來(lái)源可由軟

33、件仿真產(chǎn)生,或通過計(jì)算機(jī)接口從外部獲或通過計(jì)算機(jī)接口從外部獲取,數(shù)據(jù)可集中處理。取,數(shù)據(jù)可集中處理。面向面向DSP的的C程序程序u 極少數(shù)據(jù)的實(shí)時(shí)處理極少數(shù)據(jù)的實(shí)時(shí)處理u 數(shù)據(jù)流、時(shí)序處理數(shù)據(jù)流、時(shí)序處理u 實(shí)時(shí)性實(shí)時(shí)性u(píng) 輸入輸入/輸出為映射在存儲(chǔ)空間輸出為映射在存儲(chǔ)空間的數(shù)據(jù),結(jié)果顯示需借助示的數(shù)據(jù),結(jié)果顯示需借助示波器、邏輯分析儀等設(shè)備波器、邏輯分析儀等設(shè)備u 數(shù)據(jù)從數(shù)據(jù)從A/D獲得,由于獲得,由于DSP存儲(chǔ)容量的限制,數(shù)據(jù)需實(shí)存儲(chǔ)容量的限制,數(shù)據(jù)需實(shí)時(shí)處理。時(shí)處理。DSP技術(shù)講義,2010實(shí)例#include #include hello.h#define BUFSIZE 30stru

34、ct PARMS str = 2934, 9432, 213, 9432, &str;/* * = main = */void main()#ifdef FILEIO int i; char scanStrBUFSIZE; char fileStrBUFSIZE; size_t readSize; FILE *fptr;#endif /* write a string to stdout */ puts(hello world!n);DSP技術(shù)講義,2010續(xù)上表#ifdef FILEIO /* clear char arrays */ for (i = 0; i A STL A, *

35、(_gvar) ;A =(gvar) RET .endC程序調(diào)用匯編程序程序調(diào)用匯編程序DSP技術(shù)講義,2010DSP C程序中訪問匯編變量和常數(shù)程序中訪問匯編變量和常數(shù)有時(shí)要在有時(shí)要在C程序中訪問匯編程序定義的程序中訪問匯編程序定義的變量變量和和常數(shù)常數(shù),匯編程序中變量,匯編程序中變量和常量的定義有以下三種方法:和常量的定義有以下三種方法:u 在在.bss段中定義的變量段中定義的變量u 不在不在.bss段中定義的變量段中定義的變量u 定義的常量定義的常量(1)直接在直接在.bss段或段或.usect段中定義的未初始化變量段中定義的未初始化變量第一步:使用第一步:使用.bss或或.usect段

36、定義變量段定義變量第二步:使用第二步:使用.global偽指令定義為外部變量偽指令定義為外部變量第三步:在匯編程序中將下劃線第三步:在匯編程序中將下劃線“_”放在變量名之前放在變量名之前第四步:在第四步:在C中將變量說(shuō)明為外部變量中將變量說(shuō)明為外部變量1.訪問匯編程序定義的變量訪問匯編程序定義的變量DSP技術(shù)講義,2010C程序(程序(mixc21.c)extern int asmfunction(); /*說(shuō)明外部的說(shuō)明外部的asm函數(shù)函數(shù)*/extern int var; /*說(shuō)明外部變量說(shuō)明外部變量*/int result;main( ) int i=1000; var=1000; /*

37、說(shuō)明外部變量說(shuō)明外部變量*/ i=asmfunction(); /*調(diào)用匯編函數(shù)調(diào)用匯編函數(shù)*/ result=var*2+100; wait: goto wait;匯編程序(匯編程序(mixasm21.asm) .bss _var,10 ;為變量為變量var留出留出10個(gè)字的空間個(gè)字的空間 .global _var ;說(shuō)明外部變量說(shuō)明外部變量 .global _asmfunction .text_asmfunction: LD #1000,A; A=1000 ADD *(_var),A ;(var)+A =A STL A, *(_var) ;A =(var) RET .endDSP技術(shù)講義,

38、2010(2)不在不在.bss段中定義變量段中定義變量 匯編變量可以在匯編變量可以在.bss中定義,也可以不在中定義,也可以不在.bss中定義。中定義。C程序(程序(mixc22.c)extern int data ; /*這是一個(gè)對(duì)象這是一個(gè)對(duì)象*/int *data_p=data; /*說(shuō)明指針指向它說(shuō)明指針指向它*/int num;main( ) num=data_p3; /*指針指向數(shù)組的第指針指向數(shù)組的第4個(gè)元素個(gè)元素*/ wait: goto wait;匯編程序(匯編程序(mixasm22.asm) .global _data ;說(shuō)明外部變量說(shuō)明外部變量 .sect “.data:

39、data _tab” ;在在.data段產(chǎn)生一個(gè)名為段產(chǎn)生一個(gè)名為”data_tab“的數(shù)據(jù)的數(shù)據(jù)段段_data: .word 10 .word 20 .word 30 .word 40 .word 50 DSP技術(shù)講義,2010C程序(程序(mixc23.c)extern int table_size;/*說(shuō)明為外部的說(shuō)明為外部的*/int a10,b10;main( ) int i; for(i=0;i table_size;i+) /*引用常量引用常量*/ ai=0; bi=0; for(i=0;iA STM A, *(_gvar) ;A =(var) RET .endDSP技術(shù)講義,2

40、010u 該方法常常應(yīng)用在該方法常常應(yīng)用在C程序遇到無(wú)法實(shí)現(xiàn)的一些硬件控制問題程序遇到無(wú)法實(shí)現(xiàn)的一些硬件控制問題的情況下。而在的情況下。而在C程序中嵌入?yún)R編語(yǔ)句不但能夠有效的解決程序中嵌入?yún)R編語(yǔ)句不但能夠有效的解決這些問題,而且在這些問題,而且在C程序的關(guān)鍵部分用匯編語(yǔ)句代替程序的關(guān)鍵部分用匯編語(yǔ)句代替C語(yǔ)句語(yǔ)句可以優(yōu)化這個(gè)程序。編譯器將可以優(yōu)化這個(gè)程序。編譯器將DSP C程序中嵌入的匯編語(yǔ)程序中嵌入的匯編語(yǔ)句插入到由編譯器產(chǎn)生的匯編語(yǔ)言文件中。句插入到由編譯器產(chǎn)生的匯編語(yǔ)言文件中。格式:格式: 在匯編語(yǔ)句前加在匯編語(yǔ)句前加”t”,然后再加左右雙引號(hào),用小括號(hào)將然后再加左右雙引號(hào),用小括號(hào)將語(yǔ)

41、句括住,在括號(hào)前加上語(yǔ)句括住,在括號(hào)前加上asm標(biāo)識(shí)符。標(biāo)識(shí)符。 asm(“t RSBX INTM”); /*使使INTM1*/DSP C程序中直接嵌套匯編語(yǔ)句程序中直接嵌套匯編語(yǔ)句DSP技術(shù)講義,2010在在DSP C中嵌入?yún)R編語(yǔ)句時(shí),要注意以下幾點(diǎn):中嵌入?yún)R編語(yǔ)句時(shí),要注意以下幾點(diǎn):u要非常小心,不要干擾要非常小心,不要干擾C環(huán)境。編譯器不能檢驗(yàn)或分析插環(huán)境。編譯器不能檢驗(yàn)或分析插入的入的asm指令的正確性;指令的正確性;u將條件轉(zhuǎn)移或標(biāo)號(hào)插入到將條件轉(zhuǎn)移或標(biāo)號(hào)插入到C代碼會(huì)產(chǎn)生無(wú)法預(yù)測(cè)的結(jié)果,代碼會(huì)產(chǎn)生無(wú)法預(yù)測(cè)的結(jié)果,這是由于混淆了代碼產(chǎn)生器使用的寄存器跟蹤算法;這是由于混淆了代碼產(chǎn)生器使用的寄存器跟蹤算法;u當(dāng)使用當(dāng)使用asm語(yǔ)句時(shí),不能改變語(yǔ)句時(shí),不能改變C變量的值;變量的值;u不能利用不能利用asm語(yǔ)句插

溫馨提示

  • 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)論