![DSP教案4(匯編工具).ppt_第1頁](http://file1.renrendoc.com/fileroot2/2020-1/6/51560f10-bd41-4f29-9093-5c806624b0f3/51560f10-bd41-4f29-9093-5c806624b0f31.gif)
![DSP教案4(匯編工具).ppt_第2頁](http://file1.renrendoc.com/fileroot2/2020-1/6/51560f10-bd41-4f29-9093-5c806624b0f3/51560f10-bd41-4f29-9093-5c806624b0f32.gif)
![DSP教案4(匯編工具).ppt_第3頁](http://file1.renrendoc.com/fileroot2/2020-1/6/51560f10-bd41-4f29-9093-5c806624b0f3/51560f10-bd41-4f29-9093-5c806624b0f33.gif)
![DSP教案4(匯編工具).ppt_第4頁](http://file1.renrendoc.com/fileroot2/2020-1/6/51560f10-bd41-4f29-9093-5c806624b0f3/51560f10-bd41-4f29-9093-5c806624b0f34.gif)
![DSP教案4(匯編工具).ppt_第5頁](http://file1.renrendoc.com/fileroot2/2020-1/6/51560f10-bd41-4f29-9093-5c806624b0f3/51560f10-bd41-4f29-9093-5c806624b0f35.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第四章 編譯連接工具的使用,一. C54X匯編工具的使用,C54X的源程序可以使用匯編或C語言編寫。使用匯編語言是可以使用助記符指令集(Mnemonic Instruction Set)或代數(shù)指令集(Algebraic Instruction Set),但兩種不能混用。,兩種指令的匯編語言比較,low_pass_mac: push(st1) ; pshm st1 push(st0) ; pshm st0 push(ar0) ; pshm ar0 push(bk) ; pshm bk ar2 = data(#t_ar2) ; mvdm #t_ar2,ar2 ar3= data(#t_ar3) ;
2、 mvdm #t_ar3,ar3 ar0 = #1 ; stm #1,ar0 bk = #N ; stm #N,bk *ar3+% = a ; stl a,*ar3+% repeat(#(N-1),a=0 ; rptz a,#(N-1) a+= *ar2+0% * *ar3+0% ; mac *ar2+0%,*ar3+0%,a,ASM500命令格式如下: asm500 input file object file listing file -options input file: 匯編源文件名,缺省后綴為.asm object file: 編譯輸出的OBJ文件名,缺省后綴為.obj listi
3、ng file: 產(chǎn)生的列表文件名,缺省后綴為.lst options: 編譯器使用的各種選擇。常用選項有: -c:若使用該選項,編譯器忽略字母的大小寫。例如abc與ABC是一樣的。系統(tǒng)缺省為區(qū)分大小寫。,-i:設置搜索路徑。通知編譯器在指定的搜索路徑中去查找.copy,.include中的文件。用法舉例:-ic:c54x。 -l: (小寫的L)在編譯時產(chǎn)生列表文件,缺省后綴為.lst -mg: 匯編源程序使用代數(shù)指令集 或在源代碼中使用 . Algebraic -s:將所有的符號都放入符號表。若不使用該選項,編譯器僅將全局變量放入符號表。 -v: 指定版本。特別是需要使用BOOTLOADER
4、時,應加-v548開關。,先看兩個匯編源程序:,file1.asm .global test loop: call test bc loop,ageq .end file2.asm file3.asm .global test .global test test : test: mar *ar3+ mar(*ar3+) add #1,a a=a+#1 ret return .end .end,匯編工具ASM500的使用舉例,asm500 file1.asm asm500 file2 -l asm500 file3 -mg -l ,TMS320C54x COFF Assembler Versio
5、n 1.20 Sun Jul 30 12:11:25 2000 Copyright (c) 1997 Texas Instruments Incorporated file2.asm PAGE 1 1 .global test 2 3 000000 test: 4 000000 6D93 mar *ar3+ 5 000001 F000 add #1,a 000002 0001 6 000003 FC00 ret 7 8 .end No Errors, No Warnings,TMS320C54x COFF Assembler Version 1.20 Sun Jul 30 12:21:26 2
6、000 Copyright (c) 1997 Texas Instruments Incorporated file3.asm PAGE 1 1 .global test 2 3 000000 test: 4 000000 6D93 mar(*ar3+) 5 000001 F000 a=a+#1 000002 0001 6 000003 FC00 return 7 8 .end No Errors, No Warnings,C54X匯編語言書寫規(guī)范,語法: label: 指令 操作數(shù) ;注釋 #前綴表示立即數(shù)或直接地址 后綴B或b表示二進制常數(shù) 例如: LD #1000B,A 后綴Q或q表示八
7、進制常數(shù),或以0開始的常數(shù) 例如: LD #10Q,A (010,A) 十二進制常數(shù) 例如: LD #1000,A,C54X匯編語言書寫規(guī)范,后綴H或h表示十六進制常數(shù) 例如: LD #1000H,A 使用.set定義一個符號的值 例如 addr .set 1000h stm #addr, ar0 標號的使用 例如 b loop loop: ssbx intm 使用 .global 定義全局標號,C54X匯編語言書寫規(guī)范,使用符號$表示當前PC值 例如 B $ 可以使用結構 例如 item .struct .int value .int deltat _len .endstruct . arr
8、ay .tag item .bss array, i_len,C54X匯編語言書寫規(guī)范,可以定義宏 例如 mypush .macro pshm ah pshm al pshm bh pshm bl endm,二.C54X連接工具的使用,使用LNK500命令可以將一個或多個OBJ文件連接為一個.OUT文件。在連接時,可以通過段定位控制命令將不同的代碼、數(shù)據(jù)寫入不同的內存單元。 注意:LNK500生成的OUT文件不是純二進制代碼文件,而是包含代碼、符號表、代碼定位信息的復合文件。,LNK500的使用格式: lnk500 -options filename 1 . . filename n 使用舉例
9、:lnk500 file1.obj file2.obj -o file.out LNK500命令常用的選項有: -e global_symbol: 定義程序的進入點。global_symbol必須在源程序中使用.global命令說明。 -c:使用C編譯器的ROM初始化模式。,-cr: 使用C編譯器的RAM初始化模式。 -i dir : 指定庫文件的路徑。 -l filename: 指定連接時使用的庫文件名。 -m filename: 生成MAP文件。 -o filename: 指定生成的OUT文件名。系統(tǒng)缺省為a.out。 將文件file1.asm和file2.asm連接成OUT文件: lnk
10、500 file1 file2 -m file.map -o file.out,通過查看MAP文件可以獲得變量、子程序等符號的具體地址。注意:MAP文件只列出全局變量的地址。(用.global說明的符號),三.匯編連接工具對段的處理,為了靈活使用C54X的內存,可以將不同的代碼段放入不同的內存中。在匯編源程序中可以使用下列指令: .bss 該指令表示在.bss段中保留空間。 用法: .bss symbol,size .usect 該指令表示在指定的段中保留空間。用法: symbol .usect “section name”,size,.text 將代碼或數(shù)據(jù)放入.text段中 .data 將
11、數(shù)據(jù)放入.data段中 .sect 將代碼或數(shù)據(jù)放入指定的段中。 用法: symbol .sect “section name”,size 在連接時使用相應的控制命令以確定具體的內存地址。下面給出其中一種方法:其中,.bss, .text, .data 三個段是標準定義,而.vect, .buffer是自定義的。(t.cmd),MEMORY PAGE 0: PROG: origin = 1800h, length = 800h PAGE 4: PROG: origin = 0200h, length = 100h PAGE 1: DATA: origin = 0c00h, length = 1
12、00h PAGE 2: DATA: origin = 0d00h, length = 200h PAGE 3: DATA: origin = 0f00h, length = 100h SECTIONS .text PROG PAGE 0 .vect PROG PAGE 4 .bss DATA PAGE 1 .data DATA PAGE 2 .buffer DATA PAGE 3 ,下面是例子程序t.asm的一部分,其中紅色部分為段的定義 .bss temp,1 buf .usect .buffer,10 .sect .vect start: b mainstart nop nop b $ .
13、text mainstart: ssbx intm ; disable all interrupt !,編譯連接程序exer.asm,通過MAP文件檢查各個段是否裝入指定的內存地址。 LNK500的選項可以放入內存定位文件中。如user.cmd,這時使用連接命令可以簡化為: lnk500 user.cmd,四.C編譯器,C54X的C編譯器有兩個部分組成:先剖系C源代碼并完成優(yōu)化,然后將其轉化為匯編源代碼。另一部分就是前面介紹過的匯編語言工具。所以當使用CL500命令對C語言進行編譯時,它實際上調用: ac500 C 剖析器 opt500 優(yōu)化器 cg500 匯編語言生成器 asm500 匯編編
14、譯器,若在CL500命令中使用了-z選項,C編譯器還可以自動調用LNK500完成連接操作。 下面是一些常用的選項: -g: 允許使用C代碼級的調試。 -k: 保留生成的匯編源程序。 -ss: 產(chǎn)生C的注釋匯編源程序。 -z: 允許調用連接程序。 -o: 完成優(yōu)化 CL500還有許多有關C剖析,優(yōu)化的選項。請參考TMS320C54x Optimizing C Compiler User Guide ,我們舉一個例子:,/*/ /* function.c */ /* (Sample file for walkthrough) */ /*/ int main(i) int i; return(i 0
15、 ? -i : i ); ,cl500 -o function ,cl500 -k -o function (保留匯編) cl500 -ss -o funtion lnk500 -c function.obj lnk.cmd -o function.out -l rts.lib 或 cl500 function.c -z lnk.cmd -o function.out -l rts.lib C代碼的程序入口地址符號為_c_int00。 LNK500時使用的-c和-cr是對C語言中常量(放在.cinit段中)的處理不同。-c表示在運行時處理,而-cr則在裝入時處理。,_main: ;* A as
16、signed to _i FRAME #-1 nop STL A,*SP(0) ; |2| ;- ; 3 | return(i0 ? -i:i); ;- SSBX SXM nop LD *SP(0),A ; |3| BC L3,AGEQ ; |3| ; branch occurs ; |3| BD L4 ; |3| LD *SP(0),A ; |3| NEG A,A ; |3| ; branch occurs ; |3| L3: LD *SP(0),A ; |3| L4: FRAME #1 ; |4| RET ; |4| ; return occurs ; |4|,; _main: ;* A
17、assigned to _i ;* A assigned to _i ; 3 | return(i0 ? -i:i); ;- SSBX SXM LD *(AL),A ; |3| ABS A,A ; |3| RET ; |4| ; return occurs ; |4|,優(yōu)化后的結果,C語言編寫說明,使用Interrupt關鍵字說明函數(shù)的返回使用RETE,例如 interrupt void int_handle() int j,flag; 匯編完成后,使用開中斷RETE返回。,C語言編寫說明,使用volatile關鍵字。優(yōu)化器會盡量減少存儲器的訪問,所以有時必須禁止優(yōu)化,特別是循環(huán)控制變量。參見
18、下面的例子 unsigned int *ctrl; while(*ctrl != 0 xff); ,L2: ;- ; 4 | while(*ctrl != 0 xff); ;- MVDK *SP(0),*(AR1) ; |4| CMPM *AR1,#255 ; |4| BC L2,NTC ; |4| ; branch occurs ; |4|,未優(yōu)化的結果,優(yōu)化后的結果,. MVDK *AR1,*(AR1) L2: ;*-g2: ;* 4- if ( U$1 != 255 ) goto g2; BANZ L2,*AR1(-255) ; |4| ; branch occurs ; |4| ;* - return; .,增加了volatile關鍵字后,再優(yōu)化,L2: ;*-g2: ;* 4- if ( *ctrl != 255 ) goto g2; CMPM *AR1,#255 ; |4| BC L2,NTC ; |4| ; branch occurs ; |4| ;* - return;,C語言編寫說明,使用register關鍵字說明寄存器變量。 在C代碼中插入?yún)R編代碼: i+; asm(“ assembler text”); /* 如 asm(“ nop”); 例子,標準的連接定位文件lnk.cmd,rts.lib -st
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度環(huán)保產(chǎn)業(yè)園區(qū)規(guī)劃設計咨詢合同
- 貴州2024年貴州省重點產(chǎn)業(yè)人才蓄水池崗位專項簡化程序招聘17人筆試歷年參考題庫附帶答案詳解
- 衡陽2025年湖南衡陽市市直衛(wèi)健系統(tǒng)人才引進177人筆試歷年參考題庫附帶答案詳解
- 鹽城江蘇鹽城市教育局招錄政府購買服務用工人員筆試歷年參考題庫附帶答案詳解
- 梧州2025年廣西梧州市公安局招聘輔警274人筆試歷年參考題庫附帶答案詳解
- 2025年中國天然生漆市場調查研究報告
- 2025年中國內飾件市場調查研究報告
- 2025至2031年中國高光澤丙烯酸外墻涂料行業(yè)投資前景及策略咨詢研究報告
- 2025年舞廳效果燈項目可行性研究報告
- 2025至2031年中國羽絨衫行業(yè)投資前景及策略咨詢研究報告
- DB12-T 3034-2023 建筑消防設施檢測服務規(guī)范
- 銷售人員崗位職責培訓
- 助理醫(yī)師醫(yī)院協(xié)議書(2篇)
- 短暫性腦缺血發(fā)作
- 父親歸來那一天(2022年四川廣元中考語文試卷記敘文閱讀題及答案)
- 小學數(shù)學五年級上冊奧數(shù)應用題100道(含答案)
- 工業(yè)機器人編程語言:Epson RC+ 基本指令集教程
- 2024年同等學力申碩統(tǒng)考英語卷
- 2023.05.06-廣東省建筑施工安全生產(chǎn)隱患識別圖集(高處作業(yè)吊籃工程部分)
- 2024年上海高考數(shù)學真題試題(原卷版+含解析)
- JTG 3362-2018公路鋼筋混凝土及預應力混凝土橋涵設計規(guī)范
評論
0/150
提交評論