CX编译连接工具的使用.ppt_第1页
CX编译连接工具的使用.ppt_第2页
CX编译连接工具的使用.ppt_第3页
CX编译连接工具的使用.ppt_第4页
CX编译连接工具的使用.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章编译连接工具的使用,一.C54X汇编工具的使用,C54X的源程序可以使用汇编或C语言编写。使用汇编语言是可以使用助记符指令集(MnemonicInstructionSet)或代数指令集(AlgebraicInstructionSet),但两种不能混用。,两种指令的汇编语言比较,low_pass_mac:push(st1);pshmst1push(st0);pshmst0push(ar0);pshmar0push(bk);pshmbkar2=data(#t_ar2);mvdm#t_ar2,ar2ar3=data(#t_ar3);mvdm#t_ar3,ar3ar0=#1;stm#1,ar0bk=#N;stm#N,bk*ar3+%=a;stla,*ar3+%repeat(#(N-1),a=0;rptza,#(N-1)a+=*ar2+0%*ar3+0%;mac*ar2+0%,*ar3+0%,a,ASM500命令格式如下:asm500inputfileobjectfilelistingfile-optionsinputfile:汇编源文件名,缺省后缀为.asmobjectfile:编译输出的OBJ文件名,缺省后缀为.objlistingfile:产生的列表文件名,缺省后缀为.lstoptions:编译器使用的各种选择。常用选项有:-c:若使用该选项,编译器忽略字母的大小写。例如abc与ABC是一样的。系统缺省为区分大小写。,-i:设置搜索路径。通知编译器在指定的搜索路径中去查找.copy,.include中的文件。用法举例:-ic:c54x。-l:(小写的L)在编译时产生列表文件,缺省后缀为.lst-mg:汇编源程序使用代数指令集或在源代码中使用.Algebraic-s:将所有的符号都放入符号表。若不使用该选项,编译器仅将全局变量放入符号表。-v:指定版本。特别是需要使用BOOTLOADER时,应加-v548开关。,先看两个汇编源程序:,file1.asm.globaltestloop:calltestbcloop,ageq.endfile2.asmfile3.asm.globaltest.globaltesttest:test:mar*ar3+mar(*ar3+)add#1,aa=a+#1retreturn.end.end,汇编工具ASM500的使用举例,asm500file1.asmasm500file2-lasm500file3-mg-l,TMS320C54xCOFFAssemblerVersion1.20SunJul3012:11:252000Copyright(c)1997TexasInstrumentsIncorporatedfile2.asmPAGE11.globaltest23000000test:40000006D93mar*ar3+5000001F000add#1,a00000200016000003FC00ret78.endNoErrors,NoWarnings,TMS320C54xCOFFAssemblerVersion1.20SunJul3012:21:262000Copyright(c)1997TexasInstrumentsIncorporatedfile3.asmPAGE11.globaltest23000000test:40000006D93mar(*ar3+)5000001F000a=a+#100000200016000003FC00return78.endNoErrors,NoWarnings,C54X汇编语言书写规范,语法:label:指令操作数;注释#前缀表示立即数或直接地址后缀B或b表示二进制常数例如:LD#1000B,A后缀Q或q表示八进制常数,或以0开始的常数例如:LD#10Q,A(010,A)十二进制常数例如:LD#1000,A,C54X汇编语言书写规范,后缀H或h表示十六进制常数例如:LD#1000H,A使用.set定义一个符号的值例如addr.set1000hstm#addr,ar0标号的使用例如blooploop:ssbxintm使用.global定义全局标号,C54X汇编语言书写规范,使用符号$表示当前PC值例如B$可以使用结构,例如,deltati_len.endstructarray.tagitem.bssarray,i_len,C54X汇编语言书写规范,可以定义宏,例如,mypush.macropshmahpshmalpshmbhpshmbl.endm,二.C54X连接工具的使用,使用LNK500命令可以将一个或多个OBJ文件连接为一个.OUT文件。在连接时,可以通过段定位控制命令将不同的代码、数据写入不同的内存单元。注意:LNK500生成的OUT文件不是纯二进制代码文件,而是包含代码、符号表、代码定位信息的复合文件。,LNK500的使用格式:lnk500-optionsfilename1.filenamen使用举例:lnk500file1.objfile2.obj-ofile.outLNK500命令常用的选项有:-eglobal_symbol:定义程序的进入点。global_symbol必须在源程序中使用.global命令说明。-c:使用C编译器的ROM初始化模式。,-cr:使用C编译器的RAM初始化模式。-idir:指定库文件的路径。-lfilename:指定连接时使用的库文件名。-mfilename:生成MAP文件。-ofilename:指定生成的OUT文件名。系统缺省为a.out。将文件file1.asm和file2.asm连接成OUT文件:lnk500file1file2-mfile.map-ofile.out,通过查看MAP文件可以获得变量、子程序等符号的具体地址。注意:MAP文件只列出全局变量的地址。(用.global说明的符号)举例:编译连接实验程序exer0.asm,得到exer0.map文件。从MAP文件获得变量temp,子程序int_ser的地址。,三.汇编连接工具对段的处理,为了灵活使用C54X的内存,可以将不同的代码段放入不同的内存中。在汇编源程序中可以使用下列指令:.bss该指令表示在.bss段中保留空间。用法:.bsssymbol,size.usect该指令表示在指定的段中保留空间。用法:symbol.usect“sectionname”,size,.text将代码或数据放入.text段中.data将数据放入.data段中.sect将代码或数据放入指定的段中。用法:symbol.sect“sectionname”,size在连接时使用相应的控制命令以确定具体的内存地址。下面给出其中一种方法:其中,.bss,.text,.data三个段是标准定义,而.vect,.buffer是自定义的。(t.cmd),MEMORYPAGE0:PROG:origin=1800h,length=800hPAGE4:PROG:origin=0200h,length=100hPAGE1:DATA:origin=0c00h,length=100hPAGE2:DATA:origin=0d00h,length=200hPAGE3:DATA:origin=0f00h,length=100hSECTIONS.textPROGPAGE0.vectPROGPAGE4.bssDATAPAGE1.dataDATAPAGE2.bufferDATAPAGE3,内存定位CMD文件另一例子,asmlnk.objasmlnk1.obj-masmlnk.map-oasmlnk.outMEMORYPAGE0:IPROG:origin=0 x880,len=0 x1f80VECT:origin=0 x800,len=0 x80PAGE1:USERREGS:origin=0 x60,len=0 x1cBIOSREGS:origin=0 x7c,len=0 x4IDATA:origin=0 x80,len=0 x780,定位CMD控制文件另一例子,SECTIONS.vect:VECTPAGE0.sysregs:BIOSREGSPAGE1.gblinit:IPROGPAGE0.bios:IPROGPAGE0.text:IPROGPAGE0.cinit:IPROGPAGE0.pinit:IPROGPAGE0.sysinit:IPROGPAGE0.bss:IDATAPAGE1.far:IDATAPAGE1.const:IDATAPAGE1.switch:IDATAPAGE1.sysmem:IDATAPAGE1.sysheap:IDATAPAGE1,下面是例子程序t.asm的一部分,其中红色部分为段的定义.bsstemp,1buf.usect.buffer,10.sect.vectstart:bmainstartnopnopb$.textmainstart:ssbxintm;disableallinterrupt!,编译连接程序exer.asm,通过MAP文件检查各个段是否装入指定的内存地址。LNK500的选项可以放入内存定位文件中。如user.cmd,这时使用连接命令可以简化为:lnk500user.cmd,四.C编译器,C54X的C编译器有两个部分组成:先剖系C源代码并完成优化,然后将其转化为汇编源代码。另一部分就是前面介绍过的汇编语言工具。所以当使用CL500命令对C语言进行编译时,它实际上调用:ac500C剖析器opt500优化器cg500汇编语言生成器asm500汇编编译器,若在CL500命令中使用了-z选项,C编译器还可以自动调用LNK500完成连接操作。下面是一些常用的选项:-g:允许使用C代码级的调试。-k:保留生成的汇编源程序。-ss:产生C的注释汇编源程序。-z:允许调用连接程序。-o:完成优化CL500还有许多有关C剖析,优化的选项。请参考TMS320C54xOptimizingCCompilerUserGuide,我们举一个例子:,/*/*function.c*/*(Samplefileforwalkthrough)*/*/intmain(i)inti;return(i0?-i:i);,cl500-ofunction,cl500-k-ofunction(保留汇编)cl500-ss-ofuntionlnk500-cfunction.objlnk.cmd-ofunction.out-lrts.lib或cl500function.c-zlnk.cmd-ofunction.out-lrts.libC代码的程序入口地址符号为_c_int00。LNK500时使用的-c和-cr是对C语言中常量(放在.cinit段中)的处理不同。-c表示在运行时处理,而-cr则在装入时处理。,_main:;*Aassignedto_iFRAME#-1nopSTLA,*SP(0);|2|;-;3|return(iPROGPAGE0.switchPROGPAGE0.dataDATAPAGE1.bssDATAPAGE1.constDATAPAGE1.sysmemDATAPAGE1.stackDATAPAGE1,C语言编写说明,C代码的程序入口地址符号为_c_int00。LNK500时使用的-c和-cr是对C语言中常量(放在.cinit段中)的处理不同。-c表示

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论