版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、TMS320C54x DSP軟件開發(fā)流程一、 DSP軟件開發(fā)流程第1頁/共58頁一、一、 DSPDSP軟件開發(fā)流程軟件開發(fā)流程1 1建立源程序建立源程序2 2C C編譯器(編譯器(C CompilerC Compiler)3 3匯編器(匯編器(AssemblerAssembler)4 4連接器(連接器(LinkerLinker)5 5調(diào)試工具調(diào)試工具6 6十六進制轉(zhuǎn)換公用程序(十六進制轉(zhuǎn)換公用程序(Hex Conversion UtilityHex Conversion Utility) 第2頁/共58頁 我們調(diào)試一個程序,首先要編輯一個源文件,這個源文件可以是匯編語言我們調(diào)試一個程序,首先要
2、編輯一個源文件,這個源文件可以是匯編語言,其其后綴名為后綴名為.asm ,也可以是,也可以是C語言語言,其后綴名為其后綴名為.C 。 匯編語言的指令集有兩種,匯編語言的指令集有兩種,助記助記符指令集(符指令集(Mnemonic Instruction Set)代數(shù)指令集代數(shù)指令集(Algebraic Instruction Set)。 C語言則符合標(biāo)準(zhǔn)語言則符合標(biāo)準(zhǔn)C、C+格式。格式。 編輯好匯編語言源文件后,我們需要對這個文件進行編輯好匯編語言源文件后,我們需要對這個文件進行“匯編匯編”,從而生成一,從而生成一個個.obj后綴的中間文件。后綴的中間文件。第3頁/共58頁 之后,通過一個之后,
3、通過一個“鏈接鏈接”動作,把動作,把.obj文件生成一個文件生成一個DSP可以執(zhí)行的文件,后可以執(zhí)行的文件,后綴為綴為.out。鏈接的作用是分配執(zhí)行文件代碼在鏈接的作用是分配執(zhí)行文件代碼在DSP內(nèi)部程序空間的和數(shù)據(jù)空間的位內(nèi)部程序空間的和數(shù)據(jù)空間的位置。這些分配,通過一個后綴為置。這些分配,通過一個后綴為.cmd的文件告訴鏈接命令。的文件告訴鏈接命令。 最后,將調(diào)試成功的最后,將調(diào)試成功的.out代碼通過十六進制轉(zhuǎn)換程序轉(zhuǎn)化為可固化在可擦寫存代碼通過十六進制轉(zhuǎn)換程序轉(zhuǎn)化為可固化在可擦寫存儲器中,實現(xiàn)儲器中,實現(xiàn)DSP自動脫機運行。自動脫機運行。 第4頁/共58頁二、編譯工具及其使用二、編譯工具
4、及其使用TMS320C54xV3.50版代碼生成工具程序第5頁/共58頁(一)、編譯工具(一)、編譯工具 C編譯器 匯編器 歸檔器 連接器第6頁/共58頁 asm500 input file object file listing file -options input file: 匯編源文件名,缺省后綴為匯編源文件名,缺省后綴為.asm; object file: 編譯輸出的編譯輸出的OBJ文件名文件名,缺省后綴為缺省后綴為.obj; listing file: 產(chǎn)生的列表文件名產(chǎn)生的列表文件名,缺省后綴為缺省后綴為.lst; options: 編譯器使用的各種選擇。編譯器使用的各種選擇。1
5、 1 、匯編器、匯編器第7頁/共58頁 -c:若使用該選項,編譯器忽略字母的大小寫。例如若使用該選項,編譯器忽略字母的大小寫。例如abc與與ABC是一樣的。系統(tǒng)缺是一樣的。系統(tǒng)缺省為區(qū)分大小寫。省為區(qū)分大小寫。 - -i i:設(shè)置搜索路徑。通知編譯器在指定的搜索路徑中去查找設(shè)置搜索路徑。通知編譯器在指定的搜索路徑中去查找. .copy,.includecopy,.include中的中的文件。文件。用法舉例:用法舉例:- -ic:c54xic:c54x。 -l: (-l: (小寫的小寫的L L)在編譯時產(chǎn)生列表文件,缺省后綴為在編譯時產(chǎn)生列表文件,缺省后綴為. .lstlst第8頁/共58頁 -
6、mg: 匯編源程序使用代數(shù)指令集匯編源程序使用代數(shù)指令集 或在源代碼中使用或在源代碼中使用 -s:將所有的符號都放入符號表。若不使用該選項,編譯器僅將全局變量放入符將所有的符號都放入符號表。若不使用該選項,編譯器僅將全局變量放入符號表號表 -v: 指定版本。特別是需要使用指定版本。特別是需要使用BOOTLOADERBOOTLOADER時,應(yīng)加時,應(yīng)加- -v548v548開關(guān)開關(guān) 編譯指令執(zhí)行和參數(shù)設(shè)置,也可在編譯指令執(zhí)行和參數(shù)設(shè)置,也可在CCSCCS中進行。中進行。第9頁/共58頁2 2 、歸檔器、歸檔器Ar500 -commandoptionlibnamefilenameuCommand:
7、 指示歸檔器行為 a:加入某文件到庫文件中 d:從庫文件中刪除文件 r:替換庫文件中某變量 x:抽取庫文件中某變量第10頁/共58頁歸檔器歸檔器 Option:歸檔器工作 -q :不顯示狀態(tài)欄及相關(guān)信息; -s :打印全局變量; Libname: 庫文件名 Filename:目標(biāo)文件 Ar500 -a function sine.obj cos.obj flt.obj第11頁/共58頁3 3 、連接器、連接器lnk500 -options filename 1 . . filename n -e global_symbol:定義程序的進入點;定義程序的進入點; -c:使用使用C編譯器的編譯器的
8、ROM初始化模式;初始化模式; -cr:使用使用C編譯器的編譯器的RAM初始化模式;初始化模式; -i dir:指定庫文件的路徑;指定庫文件的路徑; -l filename:指定連接時使用的庫文件名;指定連接時使用的庫文件名; -m filename:生成生成map文件;文件; -o filename:指定生成的指定生成的out文件名。系統(tǒng)缺省為文件名。系統(tǒng)缺省為a.out.第12頁/共58頁連接器連接器 文件也可以在命令文件中設(shè)置,通常使用系統(tǒng)默認(rèn)值,即不需設(shè)置文件也可以在命令文件中設(shè)置,通常使用系統(tǒng)默認(rèn)值,即不需設(shè)置; 選項可以在命令文件中設(shè)置,效果一樣選項可以在命令文件中設(shè)置,效果一樣;
9、 具體執(zhí)行也是在具體執(zhí)行也是在CCS中中; LNK500LNK500生成的生成的OUTOUT文件不是純二進制代碼文件,而是包含代碼、符號表、代碼定位信息文件不是純二進制代碼文件,而是包含代碼、符號表、代碼定位信息的復(fù)合文件的復(fù)合文件 通過查看通過查看MAPMAP文件可以獲得變量、子程序等符號的具體地址。注意:文件可以獲得變量、子程序等符號的具體地址。注意:MAPMAP文件只列出全文件只列出全局變量的地址。(用局變量的地址。(用. .globalglobal說明的符號)說明的符號)第13頁/共58頁 段的概念 匯編器對段的處理 鏈接器對段的處理 .(二)、公共目標(biāo)文件格式(二)、公共目標(biāo)文件格式
10、第14頁/共58頁1 1 COFFCOFF文件的基本單元文件的基本單元段段 段(sections)是COFF文件中最重要的概念。一個段就是最終在存儲器映象中占據(jù)連續(xù)空間的一個數(shù)據(jù)或代碼塊。目標(biāo)文件中的每一個段都是相互獨立的。一般地,COFF目標(biāo)文件包含3個缺省的段:text段、data段、bss段。 段可以分為兩大類,即已初始化段和未初始化段。如圖1 所示為目標(biāo)文件中的段與目標(biāo)系統(tǒng)中存儲器的關(guān)系。第15頁/共58頁圖3 目標(biāo)文件中的段與目標(biāo)存儲器的關(guān)系第16頁/共58頁2 匯編器對段的處理匯編器對段的處理2.1 未初始化段 未初始化段主要用來在存儲器中保留空間,通常將它們定位到RAM中。這些段
11、在目標(biāo)文件中沒有實際內(nèi)容,只是保留空間而已。程序可以在運行時利用這些空間建立和存儲變量。未初始化段是通過使用.bss和.usect匯編偽指令建立的,兩條偽指令的句法分別為:.bss符號,字?jǐn)?shù) 符號.usect“段名”,字?jǐn)?shù)第17頁/共58頁匯編器對段的處理匯編器對段的處理2.2已初始化段 已初始化段包含可執(zhí)行代碼或已初始化數(shù)據(jù)。這些段的內(nèi)容存儲在目標(biāo)文件中,加載程序時再放到TMS320C54X存儲器中。三個用于建立初始化段的偽指令句法分別為: .text段起點 .data段起點 .sect“段名”,段起點第18頁/共58頁匯編器對段的處理匯編器對段的處理2.3命名段 命名段就是程序員自己定義的
12、段,它與缺省的.text、.data和.bss段一樣使用,但與缺省段分開匯編。 data段不同的存儲器中,將未初始化的變量匯編到與bss段不同的存儲器中。產(chǎn)生命名段的偽指令為: 符號 .usect“段名”,字?jǐn)?shù) .sect“段名”,段起點第19頁/共58頁匯編器對段的處理匯編器對段的處理2. 4子段 子段(Subsections)是大段中的小段。鏈接器可以像處理段一樣處理子段。采用子段可以使存儲器圖更加緊密。子段的命名句法為: 基段名:子段名 子段也有兩種,用.sect命令建立的是已初始化段,用.usect命令建立的是未初始化段。第20頁/共58頁匯編器對段的處理匯編器對段的處理2. 5段程序
13、計數(shù)器(SPC) 匯編器為每個段安排一個獨立的程序計數(shù)器,即段程序計數(shù)器(SPC)。SPC表示一個程序代碼段或數(shù)據(jù)段內(nèi)的當(dāng)前地址。開始時,匯編器將每個SPC置0,當(dāng)匯編器將程序代碼或數(shù)據(jù)加到一個段內(nèi)時,相應(yīng)的SPC增加。如果匯編器再次遇到相同段名的段,繼續(xù)匯編至相應(yīng)的段,且相應(yīng)的SPC在先前的基礎(chǔ)上繼續(xù)增加。第21頁/共58頁圖2 產(chǎn)生的目標(biāo)代碼第22頁/共58頁3 鏈接器對段的處理鏈接器對段的處理 鏈接器對段的處理有兩個功能。首先,它將匯編器產(chǎn)生的COFF目標(biāo)文件(.obj文件)中的各種段作為輸入段,當(dāng)有多個文件進行鏈接時,它將輸入段組合起來,在可執(zhí)行的COFF輸出模塊中建立各個輸出段。其次
14、,鏈接器為輸出段選擇存儲器地址。第23頁/共58頁鏈接器對段的處理鏈接器對段的處理 鏈接器有兩個命令完成上述功能,即: MEMORY 命令定義目標(biāo)系統(tǒng)的存儲器配置圖,包括對存儲器各部分的命名,以及規(guī)定它們的起始地址和長度。 SECTIONS命令告訴鏈接器如何將輸入段組合成輸出段,以及在存儲器何處存放輸出段。子段可以用來更精確地編排段,可用鏈接器SECTIONS命令指定子段。 第24頁/共58頁圖3 鏈接器默認(rèn)的存儲器分配第25頁/共58頁4 重新定位重新定位4.1鏈接時重新定位 將各個段定位到存儲器中,每個段都從合適的地址開始。 將符號值調(diào)整到相對于新的段地址的數(shù)值。 調(diào)整對重新定位后符號的引
15、用。第26頁/共58頁重新定位重新定位4.2運行時重新定位 將代碼裝入存儲器的一個地方,而運行在另一個地方。利用SECTIONS命令選項讓鏈接器定位兩次。一些關(guān)鍵的執(zhí)行代碼必須裝入在系統(tǒng)的ROM中,但希望在較快的RAM中運行。 鏈接器提供了一個簡單的處理該問題的方法。利用SECTIONS命令選項讓鏈接器定位兩次。第一次使用裝入關(guān)鍵字設(shè)置裝入地址,再用運行關(guān)鍵字設(shè)置運行地址。第27頁/共58頁5 程序裝入程序裝入(1)硬件仿真器和CCS集成開發(fā)環(huán)境,具有內(nèi)部的裝入器,調(diào)用裝入器的LOAD命令即可裝入可執(zhí)行程序。( 2 ) 將 代 碼 固 化 在 片 外 存 儲 器 中 , 采 用 H e x 轉(zhuǎn)
16、 換 工 具 ( H e x c o n v e r s i o n utility),例如Hex500將可執(zhí)行的COFF目標(biāo)模塊(.out文件)轉(zhuǎn)換成幾種其他目標(biāo)格式文件,然后將轉(zhuǎn)換后的文件用編程器將代碼寫入EPROM/Flash。 第28頁/共58頁6 COFF文件中的符號文件中的符號 COFF文件中有一個符號表,用于存儲程序中的符號信息。鏈接器對符號重定位時使用該表,調(diào)試工具也使用該表來提供符號調(diào)試。 外部符號指在一個模塊中定義,在另一個模塊中使用的符號??墒褂?def、.ref或.global匯編偽指令將符號定義為外部符號。.def在當(dāng)前模塊中定義,可以在別的 模 塊 中 使 用 的
17、符 號 ; . r e f 在 當(dāng) 前 模 塊 中 引 用 , 但 在 別 的 模 塊 中 定 義 的 符號;.global可用于以上任何一種情況。第29頁/共58頁三三 匯編偽指令匯編偽指令匯編語言文件的內(nèi)容匯編語言文件的內(nèi)容 匯編語言指令;匯編語言指令; 匯編指令(偽指令);匯編指令(偽指令); 注釋語句;注釋語句;第30頁/共58頁表5-2 常用的匯編偽指令第31頁/共58頁匯編偽指令匯編偽指令1段定義偽指令 為便于鏈接器將程序、數(shù)據(jù)分段定位于指定的(物理存在的)存儲器空間,并將不同的obj文件鏈接起來。段的使用非常靈活,但常用以下約定: .text 此段存放程序代碼。 .data 此段
18、存放初始化了的數(shù)據(jù)。 .bss 此段存入未初始化的變量。 .sect 名稱 定義一個有名段,放初始化了的數(shù)據(jù)或程序代碼。第32頁/共58頁匯編偽指令匯編偽指令2條件匯編偽指令 .if、.elseif、.else、.endif偽指令告訴匯編器按照表達式的計算結(jié)果對代碼塊進行條件匯編。 .if expression 標(biāo)志條件塊的開始,僅當(dāng)條件為真(expression的值非0即為真)時匯編代碼。 .elseif expression 標(biāo)志若.if條件為假,而.elseif條件為真時要匯編代碼塊。 .else 標(biāo)志若.if條件為假時要匯編代碼塊。 .endif 標(biāo)志條件塊的結(jié)束,并終止該條件代碼塊。
19、第33頁/共58頁匯編偽指令匯編偽指令3引用其他文件 .include 文件名 將指定文件復(fù)制到當(dāng)前位置,其內(nèi)容可以是程序、數(shù)據(jù)、符號定義等。 .copy 文件名 與.include類似。 .def 符號名 在當(dāng)前文件中定義一個符號,可以被其他文件使用。 .ref 符號名 在其他文件中定義,可以在本文件中使用的符號。 .global 符號名 其作用相當(dāng)于.def、.ref效果之和。第34頁/共58頁匯編偽指令匯編偽指令4 初始化常數(shù)偽指令 對于初始化段,可以使用下列偽指令定義初始化數(shù)據(jù)對于初始化段,可以使用下列偽指令定義初始化數(shù)據(jù) .long .word/.int .byte .string
20、例子同前頁例子同前頁 對于未初始化段,可以使用下列偽指令來保留空間對于未初始化段,可以使用下列偽指令來保留空間 .space 例如:例如: lable: .space 19 表示當(dāng)前段中保留表示當(dāng)前段中保留19bit空間,首地址為空間,首地址為lable。 也可以如前面例子中也可以如前面例子中 .bss sym, 19 ; Reserve space in .bss 第35頁/共58頁5、段程序計數(shù)器段程序計數(shù)器(SPC)定位指令定位指令 SPC用于記錄每個段的當(dāng)前的指針位置,便于編用于記錄每個段的當(dāng)前的指針位置,便于編譯器分配各個段譯器分配各個段 .align其后只能是其后只能是2027間的
21、間的2的冪值,其后不帶的冪值,其后不帶參數(shù),默認(rèn)為參數(shù),默認(rèn)為128,即對準(zhǔn)頁邊界,為,即對準(zhǔn)頁邊界,為1表示對準(zhǔn)表示對準(zhǔn)字邊界,為字邊界,為2表示對準(zhǔn)偶數(shù)邊界,為表示對準(zhǔn)偶數(shù)邊界,為N表示對準(zhǔn)頁表示對準(zhǔn)頁內(nèi)的第內(nèi)的第N個字邊界個字邊界 通常作用是使通常作用是使SPC對準(zhǔn)字邊界,偶地址邊界或者對準(zhǔn)字邊界,偶地址邊界或者頁邊界頁邊界匯編偽指令第36頁/共58頁第37頁/共58頁匯編偽指令匯編偽指令6 其它指令 .mmregs 定義存儲器映射寄存器的符號名,這樣就可以用AR0、PMST等助記符替換實際的存儲器地址。 .title 為匯編器提供一個打印在每一頁頂部的標(biāo)為匯編器提供一個打印在每一頁頂部
22、的標(biāo)題題 . .set set 把一個常數(shù)等效為一個符號把一個常數(shù)等效為一個符號 .end 程序塊結(jié)束。第38頁/共58頁匯編偽指令匯編偽指令4宏定義和宏調(diào)用 TMS320C54x匯編支持宏語言。如果程序中需要多次執(zhí)行某段程序,可以把這段程序定義(宏定義)為一個宏,然后在需要重復(fù)執(zhí)行這段程序的地方調(diào)用這條宏。 宏定義如下: Macname .macroparameter 1,parameter n .mexit .endm 第39頁/共58頁四四 鏈接器命令文件的編寫與使用鏈接器命令文件的編寫與使用 文件參數(shù) MEMORY偽指令 SECTIONS偽指令第40頁/共58頁文件參數(shù) -m: 生成生
23、成mapmap文件文件 -stack: :保留存儲區(qū)為未初始化變量保留存儲區(qū)為未初始化變量 -o: 輸出文件輸出文件鏈接器命令文件第41頁/共58頁鏈接器命令文件鏈接器命令文件 MEMORY偽指令就是用來指定目標(biāo)存儲器的模型。MEMORY偽指令的一般語法為:第42頁/共58頁鏈接器命令文件鏈接器命令文件第43頁/共58頁鏈接器命令文件鏈接器命令文件第44頁/共58頁第45頁/共58頁段指令語法:段指令語法: SECTIONS偽指令功能如下: 說明如何將輸入段組合成輸出段。 在可執(zhí)行程序中定義輸出段。 指定輸出段在存儲器中存放的位置。 允許對輸出段重新命名鏈接器命令文件第46頁/共58頁鏈接器命
24、令文件鏈接器命令文件第47頁/共58頁第48頁/共58頁鏈接器命令文件鏈接器命令文件例子 :File1.obj -o file1.out-m file1.mapMEMORYPAGE 0: PRO1 :origin=2000h,length=1000h PRO2:origin=3000h,length=500hPAGE 1: DAT:origin=80h,length=1000h SECTIONS .text: load = PRO1, run = PRO2 PAGE0 .vect: PRO2 PAGE0 .data align(128): DAT PAGE1 .bss: DAT PAGE1第49頁/共58頁圖 段的定位第50頁/共58頁鏈接器命令文件鏈接器命令文件系統(tǒng)默認(rèn)狀態(tài)系統(tǒng)默認(rèn)狀態(tài)圖 鏈接器默認(rèn)的存儲器分配 缺省情況下,連接器從地址080h依次放入。第51頁/共58頁五五 匯編語言程序編寫方法匯編語言程序編寫方法 匯編語言源程序格式 匯編語言中的常數(shù)和字符串第52頁/共58頁(一)(一) 匯編語言源程序格式匯編語言源程序格式 助記符指令一般包含4個部分,其一般組成形式為: 標(biāo)號: 助記符 操作數(shù) ;注釋 語句的開頭
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年-江蘇省安全員A證考試題庫
- 2025年四川省建筑安全員《B證》考試題庫及答案
- 機械設(shè)計教學(xué)課件-樣章
- 《眼保健操》課件
- 《急診影像病例》課件
- 湯姆索亞歷險記教學(xué)課件
- 【課件】體育產(chǎn)業(yè)發(fā)展的概述與日照市體育產(chǎn)業(yè)發(fā)展的現(xiàn)狀及建議
- 《IPTV播控平臺綜述》課件
- 單位人力資源管理制度佳作合集十篇
- 單位人力資源管理制度合并合集十篇
- 《經(jīng)濟學(xué)方法論》課件
- 人教版五年級上冊數(shù)學(xué)教學(xué)總結(jié)
- 環(huán)境土壤學(xué)課件
- 《計算機組裝與維護》課件
- XX行業(yè)發(fā)展趨勢分析報告未來五年的機遇與挑戰(zhàn)ppt模板
- 馬克思中國化論文【3篇】
- 遼寧省遼南協(xié)作校物理高一上期末達標(biāo)檢測試題含解析
- 辦公室干部學(xué)習(xí)對新時代辦公廳工作重要指示心得體會
- 管徑流速流量計算公式
- 中小學(xué)人工智能課程指南及教材介紹
- 城管總結(jié)美篇 城管總結(jié)結(jié)尾
評論
0/150
提交評論