【學習】第4章TMS320C54x的軟件開發(fā)與設計_第1頁
【學習】第4章TMS320C54x的軟件開發(fā)與設計_第2頁
【學習】第4章TMS320C54x的軟件開發(fā)與設計_第3頁
【學習】第4章TMS320C54x的軟件開發(fā)與設計_第4頁
【學習】第4章TMS320C54x的軟件開發(fā)與設計_第5頁
已閱讀5頁,還剩91頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、整理課件4.4.1 1 TMS320C54x軟件開發(fā)過程軟件開發(fā)過程 匯編語言程序的編輯、匯編和鏈接過程匯編語言程序的編輯、匯編和鏈接過程 COFF的一般概念的一般概念 整理課件整理課件TMS320的開發(fā)工具是一個軟件包,其中包括的開發(fā)工具是一個軟件包,其中包括:vC優(yōu)化編譯器優(yōu)化編譯器v匯編器匯編器v連接器連接器v歸檔器歸檔器v交叉引用列表器交叉引用列表器v十六進制轉換公用程序十六進制轉換公用程序整理課件C優(yōu)化編譯器(優(yōu)化編譯器(C Compile) TI 為其為其TMS320系列系列 DSP提供了一系列的提供了一系列的 C 編譯器。將標準編譯器。將標準 C 源文件編譯成為相應片源文件編譯成

2、為相應片種的匯編語言源代碼文件。種的匯編語言源代碼文件。完全符合完全符合ANSI C標準標準帶有一個完整的運行支持庫帶有一個完整的運行支持庫使用多種先進技術來優(yōu)化使用多種先進技術來優(yōu)化 C 源代碼,以產(chǎn)源代碼,以產(chǎn)生高效匯編代碼。生高效匯編代碼。整理課件匯編器(匯編器(Assembler) 將匯編語言的源程序文件匯編成為機器將匯編語言的源程序文件匯編成為機器語言的目標程序文件,其格式為語言的目標程序文件,其格式為COFF(公(公用目標文件格式)。匯編語言源程序可以用目標文件格式)。匯編語言源程序可以包括匯編語言指令(包括匯編語言指令(instruction)、匯編)、匯編偽指令(偽指令(ass

3、embler directives)和宏指)和宏指令(令(macro directives)整理課件連接器(連接器(Linker) 連接器的基本任務是將目標文件連接在連接器的基本任務是將目標文件連接在一起,產(chǎn)生可執(zhí)行模塊。連接器可以接受一起,產(chǎn)生可執(zhí)行模塊。連接器可以接受的輸入文件包括匯編器產(chǎn)生的的輸入文件包括匯編器產(chǎn)生的COFF目標文目標文件、命令文件、庫文件、以及已部分連接件、命令文件、庫文件、以及已部分連接好了的文件。它所產(chǎn)生的可執(zhí)行好了的文件。它所產(chǎn)生的可執(zhí)行COFF目標目標模 塊 可 以 裝 入 各 種 開 發(fā) 工 具模 塊 可 以 裝 入 各 種 開 發(fā) 工 具 , 或 由或 由T

4、MS320器件來執(zhí)行器件來執(zhí)行整理課件歸檔器(歸檔器(Archiver) 歸檔器允許用戶將一組文件歸入一個檔歸檔器允許用戶將一組文件歸入一個檔案文件(庫)。例如,將若干個宏歸入一案文件(庫)。例如,將若干個宏歸入一個宏庫,匯編器將搜索這個庫,并調用源個宏庫,匯編器將搜索這個庫,并調用源文件中使用的宏。也可以用歸檔器將一組文件中使用的宏。也可以用歸檔器將一組目標文件收入一個目標文件庫,連接器將目標文件收入一個目標文件庫,連接器將連接庫內的成員,并解決外部引用連接庫內的成員,并解決外部引用整理課件交叉引用列表器(交叉引用列表器(Cross-Reference Lister) 交叉引用列表器是一個查

5、錯的工具。它交叉引用列表器是一個查錯的工具。它接受已經(jīng)連接好的目標文件作為輸入,產(chǎn)接受已經(jīng)連接好的目標文件作為輸入,產(chǎn)生一個交叉引用列表作為輸出。它列出符生一個交叉引用列表作為輸出。它列出符號、符號的定義、以及它們在已經(jīng)連接的號、符號的定義、以及它們在已經(jīng)連接的源文件中的引用源文件中的引用整理課件十六進制轉換公用程序(十六進制轉換公用程序(Hex Conversion Utility)將將COFF目標文件轉換成為若干種標準的文件格式:目標文件轉換成為若干種標準的文件格式:vASCII-十六進制十六進制vExtended TektronixvIntel MCS-86vMotorola Exorc

6、iser整理課件整理課件 全匯編編程:全匯編編程:代碼效率高,可直接對硬件設置;代碼量較大,可讀性差。代碼效率高,可直接對硬件設置;代碼量較大,可讀性差。 全全C編程:編程:提高軟件開發(fā)速度和可讀性,方便軟件移植;代碼效率較低,硬件提高軟件開發(fā)速度和可讀性,方便軟件移植;代碼效率較低,硬件控制不方便。控制不方便。 混合編程混合編程 混合編程幾種方法:混合編程幾種方法:(1)獨立編寫)獨立編寫C/C+程序和匯編程序,分開編譯或匯編形成各自程序和匯編程序,分開編譯或匯編形成各自的目標模塊,再用鏈接器將的目標模塊,再用鏈接器將C/C+模塊和匯編模塊鏈接起來。模塊和匯編模塊鏈接起來。(2)在)在C/C

7、+程序中直接內嵌匯編語句。程序中直接內嵌匯編語句。(3)將)將C程序編譯生成相應的匯編程序,手工修改和優(yōu)化程序編譯生成相應的匯編程序,手工修改和優(yōu)化C編譯器編譯器生成的匯編代碼。生成的匯編代碼。整理課件 混合編程說明:混合編程說明: 變量和函數(shù)命名規(guī)則變量和函數(shù)命名規(guī)則 無論是變量還是函數(shù),在無論是變量還是函數(shù),在C C語言和匯編中均需要說明為全局的。語言和匯編中均需要說明為全局的。在在C C語言中需要有準確的函數(shù)原型說明。語言中需要有準確的函數(shù)原型說明。 在在C C語言中保持語言中保持“自然自然”的命名,而在匯編語言中該名字需加一的命名,而在匯編語言中該名字需加一個下劃線作為前綴。個下劃線作

8、為前綴。 例:例:C語言部分:語言部分:extern int product(int *x, int *y);extern int i;匯編部分:匯編部分:.global _i.global _product整理課件 混合編程說明:混合編程說明: 變量訪問規(guī)則變量訪問規(guī)則 C C程序訪問由程序訪問由.bss.bss定義的匯編變量:定義的匯編變量: (1 1)匯編程序中,該變量名前要加下劃線)匯編程序中,該變量名前要加下劃線“_”_”;(2 2)匯編程序中,用)匯編程序中,用.global.global命令將其定義為全局變量;命令將其定義為全局變量;(3 3)在)在C C程序中,將變量說明為外部

9、變量程序中,將變量說明為外部變量C語言部分:語言部分:extern int var;var=1;匯編部分:匯編部分:.bss _var, 1.global _var整理課件 混合編程說明:混合編程說明: 變量訪問規(guī)則變量訪問規(guī)則 C C程序訪問不在程序訪問不在.bss.bss中定義的匯編常量表:中定義的匯編常量表: (1 1)匯編程序中,匯編程序中,在該常量表前加一標號(標號前要加在該常量表前加一標號(標號前要加“_”_”););(2 2)匯編程序中,匯編程序中,將該標號定義為全局標號;將該標號定義為全局標號;(3 3)在)在C C程序中,以程序中,以externextern的形式對該標號聲明

10、,并利用指針訪的形式對該標號聲明,并利用指針訪 問該常量表。問該常量表。C語言部分:語言部分:extern int var;int *p=var;f=p1匯編部分:匯編部分:.global _var_var: .word 10 .word 20整理課件 混合編程說明:混合編程說明: 變量訪問規(guī)則變量訪問規(guī)則 C C程序訪問用程序訪問用.set.set定義的匯編時間常數(shù):定義的匯編時間常數(shù): (1 1)匯編程序中,匯編程序中,在該常數(shù)名前在該常數(shù)名前 “_”_”;(2 2)匯編程序中,匯編程序中,將該常數(shù)名定義為全局符號;將該常數(shù)名定義為全局符號;(3 3)在)在C C程序中,以程序中,以ext

11、ernextern的形式對該符號聲明,并用取地址運的形式對該符號聲明,并用取地址運 算符算符“&”&”取該常量參與運算取該常量參與運算C語言部分:語言部分:extern int shift;#define ad (int)(&shift);x=ad;匯編部分:匯編部分:_shift .set 3.global _shift整理課件 混合編程說明:混合編程說明: 變量訪問規(guī)則變量訪問規(guī)則 匯編程序訪問用匯編程序訪問用C C程序中的變量或數(shù)組:程序中的變量或數(shù)組: (1 1)在)在匯編程序匯編程序和和C C程序中,都將該變量或數(shù)組定義成外部屬性。程序中,都將該變量或數(shù)組定義成外部屬性。(2 2)在

12、匯編中定義該變量或數(shù)組時需在前加)在匯編中定義該變量或數(shù)組時需在前加“_”_”;C語言部分:語言部分:int speech_in160, speech_out160;main()匯編部分:匯編部分:.global _speech_in.global _speech_outld #_speech_in, b stlm b, ar2ld #_speech_out, astlm a, ar3ld #159, astlm a, brcnopnoprptb nextmvdd *ar2+, *ar3+next: 整理課件 混合編程說明:混合編程說明: 程序調用規(guī)則程序調用規(guī)則 寄存器使用說明:寄存器使用說

13、明: (1)輔助寄存器)輔助寄存器AR1、AR6、AR7由被調用函數(shù)保護,即可以在函數(shù)執(zhí)行過程由被調用函數(shù)保護,即可以在函數(shù)執(zhí)行過程中修改,但在函數(shù)返回時必須恢復。中修改,但在函數(shù)返回時必須恢復。AR0、AR2、AR3、AR4、AR5可以自由可以自由使用,即在函數(shù)執(zhí)行過程中可以修改,而且不必恢復。使用,即在函數(shù)執(zhí)行過程中可以修改,而且不必恢復。(2)堆棧指針)堆棧指針SP在函數(shù)調用時必須予以保護,但其是自動保護的,即在返回在函數(shù)調用時必須予以保護,但其是自動保護的,即在返回時,壓入椎棧的內容都將被全部彈出。時,壓入椎棧的內容都將被全部彈出。(3)ARP在函數(shù)進入和返回時,必須為在函數(shù)進入和返回

14、時,必須為0,即當前輔助寄存器為,即當前輔助寄存器為AR0。函數(shù)執(zhí)。函數(shù)執(zhí)行時可以是其它值。行時可以是其它值。(4)在缺省的情況下,編譯器總是認為)在缺省的情況下,編譯器總是認為OVM為為0。因此,若在匯編程序中將。因此,若在匯編程序中將OVM置為置為1,則在返回,則在返回C環(huán)境時,必須將其恢復為環(huán)境時,必須將其恢復為0。(5)其它狀態(tài)位和寄存器在子程序中可以任意使用,不必恢復。)其它狀態(tài)位和寄存器在子程序中可以任意使用,不必恢復。整理課件 混合編程說明:混合編程說明: 程序調用規(guī)則程序調用規(guī)則 參數(shù)傳遞說明:參數(shù)傳遞說明: (1)函數(shù)調用前,將參數(shù)以逆序壓入運行堆棧,即最右邊的參數(shù))函數(shù)調用

15、前,將參數(shù)以逆序壓入運行堆棧,即最右邊的參數(shù)最先入棧,然后自右向左將參數(shù)依次入棧,最后是返回地址入棧。最先入棧,然后自右向左將參數(shù)依次入棧,最后是返回地址入棧。第一個參數(shù)(最左邊)放入累加器第一個參數(shù)(最左邊)放入累加器A中進行傳遞。中進行傳遞。(2)函數(shù)調用結束后,將返回值置于累加器)函數(shù)調用結束后,將返回值置于累加器A中。中。編程實例編程實例以以32位乘法運算為例。雖然用位乘法運算為例。雖然用C/C+語言表達乘法運算較為方便和明了,語言表達乘法運算較為方便和明了,但由于但由于C/C+語言無法很好利用語言無法很好利用DSP匯編語言為實現(xiàn)各種乘法運算而提匯編語言為實現(xiàn)各種乘法運算而提供的指令,

16、使得供的指令,使得C/C+程序效率低下。所以這里用匯編語言完成乘法運程序效率低下。所以這里用匯編語言完成乘法運算,再用算,再用C/C+程序調用它。程序調用它。整理課件編程實例(續(xù))編程實例(續(xù))C語言主程序語言主程序#include #include int main() extern int *MPY32 (long X, long Y); /定義函數(shù)原型,返回指針值定義函數(shù)原型,返回指針值 int W4; /定義存放相乘結果的數(shù)組定義存放相乘結果的數(shù)組 int *P; int i; P=MPY32(0 x11112222, 0 x33334444); /函數(shù)調用函數(shù)調用/該指針指向數(shù)據(jù)存儲

17、器中,存放相乘結果單元的首地址該指針指向數(shù)據(jù)存儲器中,存放相乘結果單元的首地址for(i=0; i16,低,低16位相乘的進位位相乘的進位MACSU *AR2-, *AR3+,A /A+=y1*x0MACSU *AR3-, *AR2, A /A+=x1*y0w0w1w2w3y0y1x0 x1AR2AR3AR4整理課件編程實例(續(xù))匯編程序編程實例(續(xù))匯編程序STL A, *AR4- /w1=ALD A, -16,A /A=A16MAC *AR2, *AR3,A /A+=x1*y1STL A, *AR4- /w2賦值賦值STH A, *AR4 /w3賦值賦值LD #w3,A /w3單元地址作為

18、返回值,傳遞到單元地址作為返回值,傳遞到ARET整理課件 混合編程說明:混合編程說明: 匯編語句嵌入規(guī)則匯編語句嵌入規(guī)則 在在C程序中直接內嵌匯編語句。此種方法可以在程序中直接內嵌匯編語句。此種方法可以在C程序中實現(xiàn)程序中實現(xiàn)C語言無法實現(xiàn)的一些硬件控制功能,語言無法實現(xiàn)的一些硬件控制功能, 如修改寄存器值,或在編譯如修改寄存器值,或在編譯結果中添加注釋等。嵌入?yún)R編語句的方法比較簡單,只需在匯編語結果中添加注釋等。嵌入?yún)R編語句的方法比較簡單,只需在匯編語句的兩邊加上括號和雙引號,并且在括號前加上句的兩邊加上括號和雙引號,并且在括號前加上asm標識符即可,標識符即可,即即asm(“ 匯編語句匯編

19、語句”)。但需注意以下幾點:。但需注意以下幾點:(1)括號中的匯編語句必須以標號、空格、)括號中的匯編語句必須以標號、空格、tab 、分號開頭,這和通、分號開頭,這和通常的匯編編程的語法一樣。常的匯編編程的語法一樣。(2)不要在嵌入的匯編語句中使用修飾性匯編代碼)不要在嵌入的匯編語句中使用修飾性匯編代碼.text、.data等。等。(3)插入跳轉語句和標號會產(chǎn)生不可預測的結果。)插入跳轉語句和標號會產(chǎn)生不可預測的結果。(4)匯編語句不要改變)匯編語句不要改變C程序中變量的值。程序中變量的值。asm(“ssbx xf”)asm(“*this is an assembly language com

20、ment”)練習:練習:用用C實現(xiàn)循環(huán)延時,用嵌入式匯編語句對實現(xiàn)循環(huán)延時,用嵌入式匯編語句對XF引腳置高低電平,實現(xiàn)方波發(fā)生器。引腳置高低電平,實現(xiàn)方波發(fā)生器。整理課件.asm源文件源文件.obj目標文件目標文件.out輸出文件輸出文件. cmd鏈接命鏈接命令文件令文件. lst列表文件列表文件. map存儲器存儲器映像文件映像文件- - o- - m- - l整理課件整理課件常用的匯編命令:常用的匯編命令: asm500 %1 s l x 整理課件常用的匯編器命令:常用的匯編器命令: lnk500 %1.cmd lnk500:lnk500: %1.cmd:%1.cmd: 鏈接命令文件名,該

21、文件須鏈接命令文件名,該文件須指明指明目標文件、目標文件、輸入文件、輸出文件、輸入文件、輸出文件、鏈接選項和存儲器配置要求等。鏈接選項和存儲器配置要求等。 整理課件整理課件整理課件整理課件整理課件整理課件目標文件目標文件目標存儲器目標存儲器.bss.data.textRAME2PROMROM整理課件整理課件整理課件整理課件整理課件整理課件整理課件整理課件整理課件整理課件整理課件整理課件整理課件共計共計5 5個字個字整理課件共計共計5 5個字個字整理課件源程序源程序的行號的行號 段程序段程序計數(shù)器計數(shù)器目標目標代碼代碼匯編語言匯編語言源程序源程序整理課件源程序源程序的行號的行號 段程序段程序計數(shù)

22、器計數(shù)器目標目標代碼代碼匯編語言匯編語言源程序源程序整理課件源程序源程序的行號的行號 段程序段程序計數(shù)器計數(shù)器目標目標代碼代碼匯編語言匯編語言源程序源程序整理課件整理課件 15 0 15 00,1 0 0 A A 0 0 B B2 0 C C C 3,4 E E E E F F F F 5 D D D D he6,7 0 0 6 8 0 0 6 5lp8,9 0 0 6 C 0 0 7 0整理課件整理課件整理課件1 0 11 0 10 0 1 0 0 10 0 1 0 0 11 0 0 0 01 0 0 0 00 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 00123h0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 10 0 0 0 0 0 0 1 0 0 1 0 0 0 1 14h0 1 0 00 1 0

溫馨提示

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

評論

0/150

提交評論