第5章TMS320C54xDSP軟件開發(fā)_第1頁(yè)
第5章TMS320C54xDSP軟件開發(fā)_第2頁(yè)
第5章TMS320C54xDSP軟件開發(fā)_第3頁(yè)
第5章TMS320C54xDSP軟件開發(fā)_第4頁(yè)
第5章TMS320C54xDSP軟件開發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩49頁(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、第第5章章 TMS320C54x軟件開發(fā)軟件開發(fā)n5.1 軟件開發(fā)過(guò)程及開發(fā)工具軟件開發(fā)過(guò)程及開發(fā)工具n5.2 公共目標(biāo)文件格式公共目標(biāo)文件格式n5.3 常用匯編偽指令常用匯編偽指令n5.4 鏈接器命令文件的編寫與使用鏈接器命令文件的編寫與使用n5.5 匯編語(yǔ)言程序編寫方法匯編語(yǔ)言程序編寫方法n5.6 TMS320C54x C語(yǔ)言編程語(yǔ)言編程n5.7 用用C語(yǔ)言和匯編語(yǔ)言混合編程語(yǔ)言和匯編語(yǔ)言混合編程5.1 軟件開發(fā)過(guò)程及開發(fā)工具軟件開發(fā)過(guò)程及開發(fā)工具1建立源程序建立源程序2C編譯器(編譯器(C Compiler)3匯編器(匯編器(Assembler)4連接器(連接器(Linker)5調(diào)試工具

2、調(diào)試工具6十六進(jìn)制轉(zhuǎn)換公用程序(十六進(jìn)制轉(zhuǎn)換公用程序(Hex Conversion Utility) 返回首頁(yè)圖5-1 TMS320C54x DSP軟件開發(fā)流程表5-1 TMS320C54xV3.50版代碼生成工具程序返回本節(jié)5.2 公共目標(biāo)文件格式公共目標(biāo)文件格式n5.2.1 COFF文件的基本單元文件的基本單元段段n5.2.2 匯編器對(duì)段的處理匯編器對(duì)段的處理n5.2.3 鏈接器對(duì)段的處理鏈接器對(duì)段的處理n5.2.4 重新定位重新定位n5.2.5 程序裝入程序裝入n5.2.6 COFF文件中的符號(hào)文件中的符號(hào) 返回首頁(yè)5.2.1 COFF文件的基本單元文件的基本單元段段n段(段(secti

3、ons)是是COFF文件中最重要的概念。文件中最重要的概念。一個(gè)段就是最終在存儲(chǔ)器映象中占據(jù)連續(xù)空間的一個(gè)段就是最終在存儲(chǔ)器映象中占據(jù)連續(xù)空間的一個(gè)數(shù)據(jù)或代碼塊。目標(biāo)文件中的每一個(gè)段都是一個(gè)數(shù)據(jù)或代碼塊。目標(biāo)文件中的每一個(gè)段都是相互獨(dú)立的。一般地,相互獨(dú)立的。一般地,COFF目標(biāo)文件包含目標(biāo)文件包含3個(gè)缺個(gè)缺省的段:省的段:text段、段、data段、段、bss段。段。n段可以分為兩大類,即已初始化段和未初始化段。段可以分為兩大類,即已初始化段和未初始化段。如圖如圖5-2所示為目標(biāo)文件中的段與目標(biāo)系統(tǒng)中存儲(chǔ)所示為目標(biāo)文件中的段與目標(biāo)系統(tǒng)中存儲(chǔ)器的關(guān)系。器的關(guān)系。圖5-2 目標(biāo)文件中的段與目標(biāo)存

4、儲(chǔ)器的關(guān)系返回本節(jié)5.2.2 匯編器對(duì)段的處理匯編器對(duì)段的處理1未初始化段未初始化段n未初始化段主要用來(lái)在存儲(chǔ)器中保留空間,通常將它們定未初始化段主要用來(lái)在存儲(chǔ)器中保留空間,通常將它們定位到位到RAM中。這些段在目標(biāo)文件中沒有實(shí)際內(nèi)容,只是中。這些段在目標(biāo)文件中沒有實(shí)際內(nèi)容,只是保留空間而已。程序可以在運(yùn)行時(shí)利用這些空間建立和存保留空間而已。程序可以在運(yùn)行時(shí)利用這些空間建立和存儲(chǔ)變量。未初始化段是通過(guò)使用儲(chǔ)變量。未初始化段是通過(guò)使用.bss和和.usect匯編偽指令匯編偽指令建立的,兩條偽指令的句法分別為:建立的,兩條偽指令的句法分別為:.bss符號(hào),字?jǐn)?shù)符號(hào),字?jǐn)?shù) 符號(hào)符號(hào).usect“段名

5、段名”,字?jǐn)?shù),字?jǐn)?shù)2已初始化段已初始化段n已初始化段包含可執(zhí)行代碼或已初始化數(shù)據(jù)。這已初始化段包含可執(zhí)行代碼或已初始化數(shù)據(jù)。這些段的內(nèi)容存儲(chǔ)在目標(biāo)文件中,加載程序時(shí)再放些段的內(nèi)容存儲(chǔ)在目標(biāo)文件中,加載程序時(shí)再放到到TMS320C54X存儲(chǔ)器中。三個(gè)用于建立初始化存儲(chǔ)器中。三個(gè)用于建立初始化段的偽指令句法分別為:段的偽指令句法分別為: .text段起點(diǎn)段起點(diǎn) .data段起點(diǎn)段起點(diǎn) .sect“段名段名”,段起點(diǎn),段起點(diǎn)3命名段命名段n命名段就是程序員自己定義的段,它與缺省命名段就是程序員自己定義的段,它與缺省的的.text、.data和和.bss段一樣使用,但與缺省段分段一樣使用,但與缺省段分

6、開匯編。開匯編。 data段不同的存儲(chǔ)器中,將未初始化的段不同的存儲(chǔ)器中,將未初始化的變量匯編到與變量匯編到與bss段不同的存儲(chǔ)器中。產(chǎn)生命段不同的存儲(chǔ)器中。產(chǎn)生命名段的偽指令為:名段的偽指令為: 符號(hào)符號(hào).usect“段名段名”,字?jǐn)?shù),字?jǐn)?shù) .sect “段名段名”,段起點(diǎn),段起點(diǎn)4子段子段n子段(子段(Subsections)是大段中的小段。鏈接器是大段中的小段。鏈接器可以像處理段一樣處理子段。采用子段可以使存可以像處理段一樣處理子段。采用子段可以使存儲(chǔ)器圖更加緊密。子段的命名句法為:儲(chǔ)器圖更加緊密。子段的命名句法為: 基段名:子段名基段名:子段名n子段也有兩種,用子段也有兩種,用.sec

7、t命令建立的是已初始化段,命令建立的是已初始化段,用用.usect命令建立的是未初始化段。命令建立的是未初始化段。5段程序計(jì)數(shù)器(段程序計(jì)數(shù)器(SPC)n匯編器為每個(gè)段安排一個(gè)獨(dú)立的程序計(jì)數(shù)器,即匯編器為每個(gè)段安排一個(gè)獨(dú)立的程序計(jì)數(shù)器,即段程序計(jì)數(shù)器(段程序計(jì)數(shù)器(SPC)。)。SPC表示一個(gè)程序代碼表示一個(gè)程序代碼段或數(shù)據(jù)段內(nèi)的當(dāng)前地址。開始時(shí),匯編器將每段或數(shù)據(jù)段內(nèi)的當(dāng)前地址。開始時(shí),匯編器將每個(gè)個(gè)SPC置置0,當(dāng)匯編器將程序代碼或數(shù)據(jù)加到一,當(dāng)匯編器將程序代碼或數(shù)據(jù)加到一個(gè)段內(nèi)時(shí),相應(yīng)的個(gè)段內(nèi)時(shí),相應(yīng)的SPC增加。如果匯編器再次遇增加。如果匯編器再次遇到相同段名的段,繼續(xù)匯編至相應(yīng)的段,

8、且相應(yīng)到相同段名的段,繼續(xù)匯編至相應(yīng)的段,且相應(yīng)的的SPC在先前的基礎(chǔ)上繼續(xù)增加。在先前的基礎(chǔ)上繼續(xù)增加。圖5-3 例5-1產(chǎn)生的目標(biāo)代碼返回本節(jié)5.2.3 鏈接器對(duì)段的處理鏈接器對(duì)段的處理n鏈接器對(duì)段的處理有兩個(gè)功能。首先,它將匯編鏈接器對(duì)段的處理有兩個(gè)功能。首先,它將匯編器產(chǎn)生的器產(chǎn)生的COFF目標(biāo)文件(目標(biāo)文件(.obj文件)中的各種段文件)中的各種段作為輸入段,當(dāng)有多個(gè)文件進(jìn)行鏈接時(shí),它將輸作為輸入段,當(dāng)有多個(gè)文件進(jìn)行鏈接時(shí),它將輸入段組合起來(lái),在可執(zhí)行的入段組合起來(lái),在可執(zhí)行的COFF輸出模塊中建輸出模塊中建立各個(gè)輸出段。其次,鏈接器為輸出段選擇存儲(chǔ)立各個(gè)輸出段。其次,鏈接器為輸出段

9、選擇存儲(chǔ)器地址。器地址。n鏈接器有兩個(gè)命令完成上述功能,即:鏈接器有兩個(gè)命令完成上述功能,即:nMEMORY 命令命令定義目標(biāo)系統(tǒng)的存儲(chǔ)器配置定義目標(biāo)系統(tǒng)的存儲(chǔ)器配置圖,包括對(duì)存儲(chǔ)器各部分的命名,以及規(guī)定它們圖,包括對(duì)存儲(chǔ)器各部分的命名,以及規(guī)定它們的起始地址和長(zhǎng)度。的起始地址和長(zhǎng)度。nSECTIONS命令命令告訴鏈接器如何將輸入段組告訴鏈接器如何將輸入段組合成輸出段,以及在存儲(chǔ)器何處存放輸出段。子合成輸出段,以及在存儲(chǔ)器何處存放輸出段。子段可以用來(lái)更精確地編排段,可用鏈接器段可以用來(lái)更精確地編排段,可用鏈接器SECTIONS命令指定子段。命令指定子段。 圖5-4 鏈接器默認(rèn)的存儲(chǔ)器分配返回本

10、節(jié)5.2.4 重新定位重新定位1鏈接時(shí)鏈接時(shí)重新定位重新定位n將各個(gè)段定位到存儲(chǔ)器中,每個(gè)段都從合適的地將各個(gè)段定位到存儲(chǔ)器中,每個(gè)段都從合適的地址開始。址開始。n將符號(hào)值調(diào)整到相對(duì)于新的段地址的數(shù)值。將符號(hào)值調(diào)整到相對(duì)于新的段地址的數(shù)值。n調(diào)整對(duì)重新定位后符號(hào)的引用。調(diào)整對(duì)重新定位后符號(hào)的引用。2運(yùn)行時(shí)重新定位運(yùn)行時(shí)重新定位n將代碼裝入存儲(chǔ)器的一個(gè)地方,而運(yùn)行在另一個(gè)將代碼裝入存儲(chǔ)器的一個(gè)地方,而運(yùn)行在另一個(gè)地方。利用地方。利用SECTIONS命令選項(xiàng)讓鏈接器定位兩命令選項(xiàng)讓鏈接器定位兩次。一些關(guān)鍵的執(zhí)行代碼必須裝入在系統(tǒng)的次。一些關(guān)鍵的執(zhí)行代碼必須裝入在系統(tǒng)的ROM中,但希望在較快的中,但

11、希望在較快的RAM中運(yùn)行。中運(yùn)行。n鏈接器提供了一個(gè)簡(jiǎn)單的處理該問(wèn)題的方法。利鏈接器提供了一個(gè)簡(jiǎn)單的處理該問(wèn)題的方法。利用用SECTIONS命令選項(xiàng)讓鏈接器定位兩次。第一命令選項(xiàng)讓鏈接器定位兩次。第一次使用裝入關(guān)鍵字設(shè)置裝入地址,再用運(yùn)行關(guān)鍵次使用裝入關(guān)鍵字設(shè)置裝入地址,再用運(yùn)行關(guān)鍵字設(shè)置運(yùn)行地址。字設(shè)置運(yùn)行地址。返回本節(jié)5.2.5 程序裝入程序裝入(1)硬件仿真器和)硬件仿真器和CCS集成開發(fā)環(huán)境,具有內(nèi)部集成開發(fā)環(huán)境,具有內(nèi)部的裝入器,調(diào)用裝入器的的裝入器,調(diào)用裝入器的LOAD命令即可裝入可命令即可裝入可執(zhí)行程序。執(zhí)行程序。(2)將代碼固化在片外存儲(chǔ)器中,采用)將代碼固化在片外存儲(chǔ)器中,采

12、用Hex轉(zhuǎn)換工轉(zhuǎn)換工具(具(Hex conversion utility),),例如例如Hex500將將可執(zhí)行的可執(zhí)行的COFF目標(biāo)模塊(目標(biāo)模塊(.out文件)轉(zhuǎn)換成幾文件)轉(zhuǎn)換成幾種其他目標(biāo)格式文件,然后將轉(zhuǎn)換后的文件用編種其他目標(biāo)格式文件,然后將轉(zhuǎn)換后的文件用編程器將代碼寫入程器將代碼寫入EPROM/Flash。 返回本節(jié)5.2.6 COFF文件中的符號(hào)文件中的符號(hào)nCOFF文件中有一個(gè)符號(hào)表,用于存儲(chǔ)程序中的文件中有一個(gè)符號(hào)表,用于存儲(chǔ)程序中的符號(hào)信息。符號(hào)信息。鏈鏈接器對(duì)符號(hào)重定位時(shí)使用該表,調(diào)接器對(duì)符號(hào)重定位時(shí)使用該表,調(diào)試工具也使用該表來(lái)提供符號(hào)調(diào)試。試工具也使用該表來(lái)提供符號(hào)調(diào)

13、試。n外部符號(hào)指在一個(gè)模塊中定義,在另一個(gè)模塊中外部符號(hào)指在一個(gè)模塊中定義,在另一個(gè)模塊中使用的符號(hào)??墒褂檬褂玫姆?hào)??墒褂?def、.ref或或.global匯編偽匯編偽指令將符號(hào)定義為外部符號(hào)。指令將符號(hào)定義為外部符號(hào)。.def在當(dāng)前模塊中在當(dāng)前模塊中定義,可以在別的模塊中使用的符號(hào);定義,可以在別的模塊中使用的符號(hào);.ref在當(dāng)在當(dāng)前 模 塊 中 引 用 , 但 在 別 的 模 塊 中 定 義 的 符前 模 塊 中 引 用 , 但 在 別 的 模 塊 中 定 義 的 符號(hào);號(hào);.global可用于以上任何一種情況??捎糜谝陨先魏我环N情況。返回本節(jié)5.3 常用匯編偽指令常用匯編偽指令返回

14、首頁(yè)表5-2 常用的匯編偽指令1段定義偽指令段定義偽指令n為便于鏈接器將程序、數(shù)據(jù)分段定位于指定的(物理存在為便于鏈接器將程序、數(shù)據(jù)分段定位于指定的(物理存在的)存儲(chǔ)器空間,并將不同的的)存儲(chǔ)器空間,并將不同的obj文件鏈接起來(lái)。段的使文件鏈接起來(lái)。段的使用非常靈活,但常用以下約定:用非常靈活,但常用以下約定:n.text 此段存放程序代碼。此段存放程序代碼。n.data 此段存放初始化了的數(shù)據(jù)。此段存放初始化了的數(shù)據(jù)。n.bss 此段存入未初始化的變量。此段存入未初始化的變量。n.sect 名稱名稱 定義一個(gè)有名段,放初始化了的數(shù)據(jù)或程定義一個(gè)有名段,放初始化了的數(shù)據(jù)或程序代碼。序代碼。2條

15、件匯編偽指令條件匯編偽指令n.if、.elseif、.else、.endif偽指令告訴匯編器按照表達(dá)式偽指令告訴匯編器按照表達(dá)式的計(jì)算結(jié)果對(duì)代碼塊進(jìn)行條件匯編。的計(jì)算結(jié)果對(duì)代碼塊進(jìn)行條件匯編。n.if expression 標(biāo)志條件塊的開始,僅當(dāng)條件為真標(biāo)志條件塊的開始,僅當(dāng)條件為真(expression的值非的值非0即為真)時(shí)匯編代碼。即為真)時(shí)匯編代碼。n.elseif expression 標(biāo)志若標(biāo)志若.if條件為假,而條件為假,而.elseif條件條件為真時(shí)要匯編代碼塊。為真時(shí)要匯編代碼塊。n.else 標(biāo)志若標(biāo)志若.if條件為假時(shí)要匯編代碼塊。條件為假時(shí)要匯編代碼塊。n.endif

16、標(biāo)志條件塊的結(jié)束,并終止該條件代碼塊。標(biāo)志條件塊的結(jié)束,并終止該條件代碼塊。3引用其他文件和初始化常數(shù)偽指令引用其他文件和初始化常數(shù)偽指令n.include 文件名文件名 將指定文件復(fù)制到當(dāng)前位置,其內(nèi)將指定文件復(fù)制到當(dāng)前位置,其內(nèi)容可以是程序、數(shù)據(jù)、符號(hào)定義等。容可以是程序、數(shù)據(jù)、符號(hào)定義等。n.copy 文件名文件名 與與.include類似。類似。n.def 符號(hào)名符號(hào)名 在當(dāng)前文件中定義一個(gè)符號(hào),可以被其他在當(dāng)前文件中定義一個(gè)符號(hào),可以被其他文件使用。文件使用。n.ref 符號(hào)名符號(hào)名 在其他文件中定義,可以在本文件中使用在其他文件中定義,可以在本文件中使用的符號(hào)。的符號(hào)。n.glob

17、al 符號(hào)名符號(hào)名 其作用相當(dāng)于其作用相當(dāng)于.def、.ref效果之和。效果之和。n.mmregs 定義存儲(chǔ)器映射寄存器的符號(hào)名,這樣就可定義存儲(chǔ)器映射寄存器的符號(hào)名,這樣就可以用以用AR0、PMST等助記符替換實(shí)際的存儲(chǔ)器地址。等助記符替換實(shí)際的存儲(chǔ)器地址。n.float 數(shù)數(shù)1,數(shù),數(shù)2 指定的各浮點(diǎn)數(shù)連續(xù)放置到存儲(chǔ)器中指定的各浮點(diǎn)數(shù)連續(xù)放置到存儲(chǔ)器中(從當(dāng)前段指針開始)。(從當(dāng)前段指針開始)。n.word 數(shù)數(shù)1,數(shù),數(shù)2 指定的各數(shù)(十六進(jìn)制)連續(xù)放置到指定的各數(shù)(十六進(jìn)制)連續(xù)放置到存儲(chǔ)器中。存儲(chǔ)器中。n.space n 以位為單位,空出以位為單位,空出n位存儲(chǔ)空間。位存儲(chǔ)空間。n.

18、end 程序塊結(jié)束。程序塊結(jié)束。4宏定義和宏調(diào)用宏定義和宏調(diào)用nTMS320C54x匯編支持宏語(yǔ)言。如果程序中需要多次執(zhí)匯編支持宏語(yǔ)言。如果程序中需要多次執(zhí)行某段程序,可以把這段程序定義(宏定義)為一個(gè)宏,行某段程序,可以把這段程序定義(宏定義)為一個(gè)宏,然后在需要重復(fù)執(zhí)行這段程序的地方調(diào)用這條宏。然后在需要重復(fù)執(zhí)行這段程序的地方調(diào)用這條宏。n宏定義如下:宏定義如下:Macname .macroparameter 1,parameter n .mexit .endm 返回本節(jié)5.4 鏈接器命令文件的編寫與使用鏈接器命令文件的編寫與使用n5.4.1 MEMORY偽指令及其使用偽指令及其使用n5.

19、4.2 SECTIONS偽指令及其使用偽指令及其使用 返回首頁(yè)5.4.1 MEMORY偽指令及其使用偽指令及其使用nMEMORY偽指令就是用來(lái)指定目標(biāo)存儲(chǔ)器的模型。偽指令就是用來(lái)指定目標(biāo)存儲(chǔ)器的模型。MEMORY偽指令的一般語(yǔ)法為:偽指令的一般語(yǔ)法為:n SECTIONS name : property ,property ,property . name : property ,property ,property . name : property ,property ,property . 返回本節(jié)5.4.2 SECTIONS偽指令及其使用偽指令及其使用nSECTIONS偽指令功能如下:

20、偽指令功能如下:n 說(shuō)明如何將輸入段組合成輸出段。說(shuō)明如何將輸入段組合成輸出段。n在可執(zhí)行程序中定義輸出段。在可執(zhí)行程序中定義輸出段。n指定輸出段在存儲(chǔ)器中存放的位置。指定輸出段在存儲(chǔ)器中存放的位置。n允許對(duì)輸出段重新命名。允許對(duì)輸出段重新命名。圖5-5 例5-6中段的定位返回本節(jié)5.5 匯編語(yǔ)言程序編寫方法匯編語(yǔ)言程序編寫方法n5.5.1 匯編語(yǔ)言源程序格式匯編語(yǔ)言源程序格式n5.5.2 匯編語(yǔ)言中的常數(shù)和字符串匯編語(yǔ)言中的常數(shù)和字符串n5.5.3 匯編源程序中的符號(hào)匯編源程序中的符號(hào)n5.5.4 匯編源程序中的表達(dá)式匯編源程序中的表達(dá)式 返回首頁(yè)5.5.1 匯編語(yǔ)言源程序格式匯編語(yǔ)言源程序

21、格式n助記符助記符指令一般包含指令一般包含4個(gè)部分,其一般組成形式個(gè)部分,其一般組成形式為:為:n標(biāo)號(hào)標(biāo)號(hào): 助記符助記符 操作數(shù)操作數(shù) ;注釋;注釋1標(biāo)號(hào)區(qū)標(biāo)號(hào)區(qū)n所有匯編指令和大多數(shù)匯編偽指令前面都可以帶所有匯編指令和大多數(shù)匯編偽指令前面都可以帶有標(biāo)號(hào),標(biāo)號(hào)可以長(zhǎng)達(dá)有標(biāo)號(hào),標(biāo)號(hào)可以長(zhǎng)達(dá)32個(gè)字符,由個(gè)字符,由AZ、az、09、_、和和$符號(hào)組成,且第一個(gè)字符不能是數(shù)符號(hào)組成,且第一個(gè)字符不能是數(shù)字,區(qū)分大小寫。字,區(qū)分大小寫。 2助記符區(qū)助記符區(qū)n助記符區(qū)不能從第一列開始,否則被認(rèn)為是標(biāo)號(hào)。助記符區(qū)不能從第一列開始,否則被認(rèn)為是標(biāo)號(hào)。3操作數(shù)區(qū)操作數(shù)區(qū)n操作數(shù)區(qū)是一個(gè)操作數(shù)列表,可以是常數(shù)

22、、符號(hào)或常數(shù)與操作數(shù)區(qū)是一個(gè)操作數(shù)列表,可以是常數(shù)、符號(hào)或常數(shù)與符號(hào)構(gòu)成的表達(dá)式。操作數(shù)間需用符號(hào)構(gòu)成的表達(dá)式。操作數(shù)間需用“,”號(hào)隔開。號(hào)隔開。4注釋區(qū)注釋區(qū)n注釋區(qū)可以從任何一列開始,可以包含注釋區(qū)可以從任何一列開始,可以包含ASCII字符和空格。字符和空格。 返回本節(jié)5.5.2 匯編語(yǔ)言中的常數(shù)和字符串匯編語(yǔ)言中的常數(shù)和字符串表5-3 COFF常數(shù)與字符串返回本節(jié)5.5.3 匯編源程序中的符號(hào)匯編源程序中的符號(hào)1標(biāo)號(hào)標(biāo)號(hào)2局部標(biāo)號(hào)局部標(biāo)號(hào)3符號(hào)常數(shù)符號(hào)常數(shù)4先定義的符號(hào)常數(shù)先定義的符號(hào)常數(shù)5替代符號(hào)替代符號(hào)表5-4 可以用在表達(dá)式中的運(yùn)算符表5-5 帶有絕對(duì)符號(hào)、可重定位符號(hào)的表達(dá)式返回

23、本節(jié)5.5.4 匯編源程序中的表達(dá)式匯編源程序中的表達(dá)式n表達(dá)式可以是常數(shù)、符號(hào)或由算術(shù)運(yùn)算符結(jié)合的表達(dá)式可以是常數(shù)、符號(hào)或由算術(shù)運(yùn)算符結(jié)合的常 數(shù) 和 符 號(hào) 。 表 達(dá) 式 值 的 有 效 范 圍 為常 數(shù) 和 符 號(hào) 。 表 達(dá) 式 值 的 有 效 范 圍 為 -3276832767。1運(yùn)算符(運(yùn)算符(表表5-4 所示)所示)2合格的表達(dá)式合格的表達(dá)式(表表5-5所示所示 )返回本節(jié)5.6 TMS320C54x C語(yǔ)言編程語(yǔ)言編程n5.6.1 存儲(chǔ)器模式存儲(chǔ)器模式n5.6.2 寄存器規(guī)則寄存器規(guī)則n5.6.3 函數(shù)調(diào)用規(guī)則函數(shù)調(diào)用規(guī)則n5.6.4 中斷處理中斷處理n5.6.5 表達(dá)式分析

24、表達(dá)式分析 返回首頁(yè)5.6.1 存儲(chǔ)器模式存儲(chǔ)器模式1段段nC54x將存儲(chǔ)器處理為程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器兩將存儲(chǔ)器處理為程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器兩個(gè)線性塊。程序存儲(chǔ)器包含可執(zhí)行代碼;數(shù)據(jù)存?zhèn)€線性塊。程序存儲(chǔ)器包含可執(zhí)行代碼;數(shù)據(jù)存儲(chǔ)器主要包含外部變量、靜態(tài)變量和系統(tǒng)堆棧。儲(chǔ)器主要包含外部變量、靜態(tài)變量和系統(tǒng)堆棧。編譯器的任務(wù)是產(chǎn)生可重定位的代碼,允許鏈接編譯器的任務(wù)是產(chǎn)生可重定位的代碼,允許鏈接器將代碼和數(shù)據(jù)定位進(jìn)合適的存儲(chǔ)空間。器將代碼和數(shù)據(jù)定位進(jìn)合適的存儲(chǔ)空間。C編譯編譯器 對(duì)器 對(duì) C 語(yǔ) 言 編 譯 后 除 了 生 成語(yǔ) 言 編 譯 后 除 了 生 成 3 個(gè) 基 本 段 ,個(gè) 基 本

25、段 ,即即. t e x t 、 . d a t a 、 . b s s外 , 還 生外 , 還 生成成.cinit、.const、.stack、.sysmem段段。2C/C+系統(tǒng)堆棧系統(tǒng)堆棧n.stack不同于不同于DSP匯編指令定義的堆棧。匯編指令定義的堆棧。DSP匯編程序中匯編程序中要將堆棧指針要將堆棧指針SP指向一塊指向一塊RAM,用于保存中斷、調(diào)用時(shí)用于保存中斷、調(diào)用時(shí)的返回地址,存放的返回地址,存放PUSH指令的壓棧內(nèi)容。指令的壓棧內(nèi)容。n.stack定義的系統(tǒng)堆棧實(shí)現(xiàn)的功能是保護(hù)函數(shù)的返回地址,定義的系統(tǒng)堆棧實(shí)現(xiàn)的功能是保護(hù)函數(shù)的返回地址,分配局部變量,在調(diào)用函數(shù)時(shí)用于傳遞參數(shù),

26、保護(hù)臨時(shí)結(jié)分配局部變量,在調(diào)用函數(shù)時(shí)用于傳遞參數(shù),保護(hù)臨時(shí)結(jié)果。果。n.stack定義的段大小(堆棧大?。┛捎面溄悠鬟x項(xiàng)定義的段大?。ǘ褩4笮。┛捎面溄悠鬟x項(xiàng)-stack size設(shè)定,鏈接器還產(chǎn)生一個(gè)全局符號(hào)設(shè)定,鏈接器還產(chǎn)生一個(gè)全局符號(hào)_ _STACK_SIZE,并賦給它等于堆棧長(zhǎng)度的值,以字為單位,缺省值為并賦給它等于堆棧長(zhǎng)度的值,以字為單位,缺省值為1K。3存儲(chǔ)器分配存儲(chǔ)器分配(1)運(yùn)行時(shí)間支持函數(shù)。)運(yùn)行時(shí)間支持函數(shù)。 (2)動(dòng)態(tài)存儲(chǔ)器分配。)動(dòng)態(tài)存儲(chǔ)器分配。 (3)靜態(tài)和全局變量的存儲(chǔ)器分配。)靜態(tài)和全局變量的存儲(chǔ)器分配。(4)位域)位域/結(jié)構(gòu)的對(duì)準(zhǔn)。結(jié)構(gòu)的對(duì)準(zhǔn)。 返回本節(jié)5.6.

27、2 寄存器規(guī)則寄存器規(guī)則n寄存器規(guī)則明確了編譯器如何使用寄存器以及在函數(shù)調(diào)用寄存器規(guī)則明確了編譯器如何使用寄存器以及在函數(shù)調(diào)用過(guò)程中如何保護(hù)寄存器。過(guò)程中如何保護(hù)寄存器。(1)輔助寄存器)輔助寄存器 (2)堆棧指針)堆棧指針SP (3)ARP (4)在默認(rèn)情況下,編譯器總是假定)在默認(rèn)情況下,編譯器總是假定ST1中的中的OVM在硬件在硬件復(fù)位時(shí)被清復(fù)位時(shí)被清0。若在匯編代碼中對(duì)。若在匯編代碼中對(duì)OVM置位為置位為1,返回到,返回到C環(huán)境時(shí)必須復(fù)位。環(huán)境時(shí)必須復(fù)位。(5)寄存器變量)寄存器變量 返回本節(jié)5.6.3 函數(shù)調(diào)用規(guī)則函數(shù)調(diào)用規(guī)則(1)局部幀的產(chǎn)生)局部幀的產(chǎn)生 (2)參數(shù)傳遞)參數(shù)傳遞

28、 (3)函數(shù)的返回)函數(shù)的返回 返回本節(jié)5.6.4 中斷處理中斷處理(1)中斷的使能和屏蔽必須由程序員自己來(lái)設(shè)置。)中斷的使能和屏蔽必須由程序員自己來(lái)設(shè)置。 (2)中斷程序沒有參數(shù)傳遞,即使說(shuō)明,也會(huì)被)中斷程序沒有參數(shù)傳遞,即使說(shuō)明,也會(huì)被忽略忽略(3)中斷處理程序不能被正常的)中斷處理程序不能被正常的C程序調(diào)用。程序調(diào)用。(4)為了使中斷程序與中斷一致,在相應(yīng)的中斷)為了使中斷程序與中斷一致,在相應(yīng)的中斷矢量中必須放置一條轉(zhuǎn)移指令,可以用矢量中必須放置一條轉(zhuǎn)移指令,可以用.sect匯編匯編偽指令建立一個(gè)簡(jiǎn)單的跳轉(zhuǎn)指令表來(lái)完成此項(xiàng)功偽指令建立一個(gè)簡(jiǎn)單的跳轉(zhuǎn)指令表來(lái)完成此項(xiàng)功能。能。(5)在匯

29、編語(yǔ)言中,注意在符號(hào)名前面加上一個(gè))在匯編語(yǔ)言中,注意在符號(hào)名前面加上一個(gè)下劃線,例如下劃線,例如c_int00記為記為_ c_int00。(6)中斷程序使用的所有寄存器,包括狀態(tài)寄存中斷程序使用的所有寄存器,包括狀態(tài)寄存器和程序中調(diào)用函數(shù)使用的寄存器都必須予以保器和程序中調(diào)用函數(shù)使用的寄存器都必須予以保護(hù)。護(hù)。(7)TMS320C54x C編譯器將編譯器將C語(yǔ)言進(jìn)行了擴(kuò)展,語(yǔ)言進(jìn)行了擴(kuò)展,中斷可以利用中斷可以利用interrupt關(guān)鍵字由關(guān)鍵字由C/C+函數(shù)直接函數(shù)直接處理。處理。返回本節(jié)5.6.5 表達(dá)式分析表達(dá)式分析n當(dāng)當(dāng)C程序中需要計(jì)算整型表達(dá)式時(shí),必須注意以程序中需要計(jì)算整型表達(dá)式時(shí)

30、,必須注意以下幾點(diǎn):下幾點(diǎn):(1)算術(shù)上溢和下溢。)算術(shù)上溢和下溢。 (2)整除和取模。)整除和取模。 (3)C代碼對(duì)代碼對(duì)16位乘法結(jié)果高位乘法結(jié)果高16位的訪問(wèn)。位的訪問(wèn)。 返回本節(jié)5.7 用用C語(yǔ)言和匯編語(yǔ)言混合編程語(yǔ)言和匯編語(yǔ)言混合編程n5.7.1 獨(dú)立的獨(dú)立的C模塊和匯編模塊接口模塊和匯編模塊接口n5.7.2 從從C程序中訪問(wèn)匯編程序變量程序中訪問(wèn)匯編程序變量n5.7.3 在在C程序中直接嵌入?yún)R編語(yǔ)句程序中直接嵌入?yún)R編語(yǔ)句 返回首頁(yè)5.7.1 獨(dú)立的獨(dú)立的C模塊和匯編模塊接口模塊和匯編模塊接口n在編寫?yīng)毩⒌膮R編程序時(shí),必須注意以下幾點(diǎn):在編寫?yīng)毩⒌膮R編程序時(shí),必須注意以下幾點(diǎn):(1)

31、不論是用)不論是用C語(yǔ)言編寫的函數(shù)還是用匯編語(yǔ)言編語(yǔ)言編寫的函數(shù)還是用匯編語(yǔ)言編寫的函數(shù),都必須遵循寄存器使用規(guī)則。寫的函數(shù),都必須遵循寄存器使用規(guī)則。(2)必須保護(hù)函數(shù)要用到的幾個(gè)特定寄存器。)必須保護(hù)函數(shù)要用到的幾個(gè)特定寄存器。 (3)中斷程序必須保護(hù)所有用到的寄存器。)中斷程序必須保護(hù)所有用到的寄存器。(4)從匯編程序調(diào)用)從匯編程序調(diào)用C函數(shù)時(shí),第一個(gè)參數(shù)(最左函數(shù)時(shí),第一個(gè)參數(shù)(最左邊)必須放入累加器邊)必須放入累加器A中,剩下的參數(shù)按自右向中,剩下的參數(shù)按自右向左的順序壓入堆棧。左的順序壓入堆棧。(5)調(diào)用)調(diào)用C函數(shù)時(shí),注意函數(shù)時(shí),注意C函數(shù)只保護(hù)了幾個(gè)特定的函數(shù)只保護(hù)了幾個(gè)特定的寄存器,而其他是可以自由使用的。寄存器,而其他是可以自由使用的。(6)長(zhǎng)整型和浮點(diǎn)數(shù)在存儲(chǔ)器中存放的順序是低位)長(zhǎng)整型和浮點(diǎn)數(shù)在存儲(chǔ)器中存放的順序是低位

溫馨提示

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