TMS320C54x软件开发过程DSP原理与开发实例.ppt

上传人:牧羊曲112 文档编号:6522023 上传时间:2023-11-08 格式:PPT 页数:89 大小:1.73MB
返回 下载 相关 举报
TMS320C54x软件开发过程DSP原理与开发实例.ppt_第1页
第1页 / 共89页
TMS320C54x软件开发过程DSP原理与开发实例.ppt_第2页
第2页 / 共89页
TMS320C54x软件开发过程DSP原理与开发实例.ppt_第3页
第3页 / 共89页
TMS320C54x软件开发过程DSP原理与开发实例.ppt_第4页
第4页 / 共89页
TMS320C54x软件开发过程DSP原理与开发实例.ppt_第5页
第5页 / 共89页
点击查看更多>>
资源描述

《TMS320C54x软件开发过程DSP原理与开发实例.ppt》由会员分享,可在线阅读,更多相关《TMS320C54x软件开发过程DSP原理与开发实例.ppt(89页珍藏版)》请在三一办公上搜索。

1、第三章 TMS320C54x 软件开发过程,3.1 TMS320C54x应用软件开发过程3.2 汇编语言程序的编辑、汇编和链接过程3.3 汇编伪指令3.4 汇编宏指令3.5 COFF的一般概念3.6 C语言程序设计概述3.7 混合编程3.8 小结,【重点难点】段的定义和用法 链接命令文件 C 语言编程 混合编程,TMS320C54x应用软件开发过程,3.1 TMS320C54x应用软件开发过程,软件开发流程图,将C语言源程序自动地编译为C54x 的汇编语言源程序。即生成.asm文件。,将汇编语言源文件汇编成基于公用目标文件格式的机器语言目标文件。即生成.obj文件。,将汇编生成的、可重新定位的

2、COFF目标模块组合成一个可执行的COFF目标模块。,将一组文件(源文件或目标文件)集中为一个文档文件库。,将包含助记符指令的汇编语言源文件转换成包含代数指令的汇编语言源文件。,建立用户自己用的、C语言编写的支持运行的库函数。,建立用户的C语言运行支持库。标准运行支持库在rts.src 里提供源代码,在rts.lib里提供目标代码。,将COFF目标文件转换TI、Intel、Motorola或Tektronix公司的目标文件格式。,生成abs输出文件。对abs文件汇编产生包含绝对地址(而不是相对地址)的清单。,生成一个交叉引用清单,列出所链接的源文件中的符号及其定义和引用情况。,开发目的:产生一

3、个可由C54x目标系统执行的模块。调试工具:软件仿真器(Simulator)可扩展的开发系统硬件仿真器XDS510(Emulator)评价模块(EVM)DSK开发套件 需要开发人员编写的文件:源程序(.c或.asm)链接命令文件(.cmd)中断向量表,TMS320C54x应用软件开发过程,3.2 汇编语言程序的 编辑、汇编和链接过程,汇编语言程序的编辑、汇编和链接过程,汇编伪指令,3.3 汇编伪指令,8种伪指令:1)段定义伪指令;2)常数初始化伪指令;3)段程序计数器定位伪指令;4)输出列表格式伪指令;5)引用其他文件的伪指令;6)条件汇编伪指令;7)汇编时符号定义伪指令;8)其他汇编伪指令。

4、,1)段定义伪指令,.bss symbol,size in words,blocking flag,alignment flag 为未初始化变量在.bss段内保留空间,可在RAM中分配变量。,必需参数,定义了指向伪指令所保留的第一个单元地址的符号,符号名对应于所要保留空间的变量。,必需参数,应该是绝对表达式。汇编器在.bss段内分配size个字。,可选参数。如果该参数大于0,汇编器分配连续的size个字。也就是说除非size大于一页,否则被分配的空间不会跨越页边界。,可选参数。如果该参数大于0,段对准到长字边界,symbol.usect“段名”,字数,blocking flag,alignme

5、nt flag 在一个未初始化的命名段中保留空间。,必需参数,定义了指向伪指令所保留的第一个单元地址的符号,符号名对应于所要保留空间的变量。,必需参数,应该是绝对表达式。定义了保留的字数。,可选参数。如果该参数大于0,汇编器分配连续的size个字。也就是说除非size大于一页,否则被分配的空间不会跨越页边界。,可选参数。如果该参数大于0,段对准到长字边界,命名了未初始化段。注意必须包含在双引号内。,.data 包含初始化数据。使汇编器开始把源代码中的初始化数据汇编到.data段内,且.data变为当前段。.sect“section name”:定义包含代码或数据的已初始化命名段,将紧随其后的代

6、码或数据存入该段。.text:包含可执行的代码。如果还没有代码被汇编到.text段中,那么段程序计数器被设置为0,否则段程序计数器恢复到它原先在段内的值。.text是默认段,除非规定了另外的伪指令,否则在汇编开始时,汇编器将把代码汇编到.text段。,段名,注意section name必须包含在双引内。,汇编伪指令,2)常数初始化伪指令,.bes size in bits.space size in bits 在当前段中保留size个数的位,汇编器对这些保留的位填0,可用位数乘以16来实现保留字。注意:.bes 指向包含保留位的最后一个字,.space指向包含保留位的第一个字。.byte va

7、lue1,,valuen:在当前段内初始化一个或多个 连续的8位字。.field value,size in bits:将单个值放进当前字的指定位域。此指令可将数值放入当前字中规定的位数,并从最高有效位开始。在字被填满前,汇编器不增加段程序计数器(SPC)的值。,汇编伪指令,.float value1,valuen:计算以IEEE格式表示的单 精度(32位)浮点数,并将它存储在当前段的两个连 续的字中,先存最高有效位。.int value1,valuen.word value1,valuen两指令等价,将一个或多个值放在当前段的连续的16位域中。.long value1,valuen:将32位

8、的值存储在当前段的两个连续字中,先存最高有效位。.string“string1”,“stringn”.pstring“string1”,“stringn”将一个或多个字符串中的8位字符放进当前段。二者的区别在于:.string将8位字符放入当前段的连续字中,.pstring将两个8位的字符打包成一个字。,汇编伪指令,3)段程序计数器定位伪指令,.alignsize根据size 的值将段程序计数器(SPC)对准在1128字的边界,这保证了在伪指令后面的代码开始在某个字或页面的边界上。(1)操作数为1,对准SPC到字的边界;(2)操作数为2,对准SPC到长字(偶数地址)的边界;(3)操作数为128

9、,对准SPC到页面的边界;(4)没有操作数时,默认为页面边界。,汇编伪指令,4)输出列表格式伪指令,.drnolist 在列表文件中禁止打印下述伪指令,.drlist 允许下述伪指令在列表文件中出现。.asg.fcnolist.ssnolist.break.mlist.var.emsg.wmsg.mmsg.eval.mnolist.fclist.sslist.fclist 允许列出条件为假的代码块,缺省方式。.fcnolist 禁止列出条件为假的代码块。.length 页面长度 控制文件列表的页面长度。.nolist 在列表文件中不打印所选择的源语句。.list 在列表文件中打印所选择的源语句

10、。,汇编伪指令,.mnolist 禁止宏扩展和循环块在列表文件中出现.mlist 允许宏扩展和循环块在列表文件中出现,这是 汇编的默认行为。.page 在列表文件中产生新的一页。.ssnolist 禁止替代符号扩展的列出。.sslist 允许替代符号扩展的列出。.tab size 定义制表符的大小。.title“string”提供了汇编器在每页顶部打印的标题。.width page width 控制列表文件页面的宽度。,汇编伪指令,5)引用其他文件和符号伪指令,.include“filename”告诉汇编器开始从其他文件读取 源代码语句,源语句不出现在列表文件中。其内容可以 是程序、数据、符号

11、定义等。.copy“filename”告诉汇编器开始从其他文件读取 源代码语句,源语句出现在列表文件中。其内容可以是 程序、数据、符号定义等。.def 符号名1,符号名n在当前文件中定义一个或 多个符号,该符号可以被其他文件使用。.ref 符号名1,符号名n在其他文件中定义一个或 多个符号,该符号可以在本文件中使用。,汇编伪指令,6)条件汇编伪指令,.if.elseif/else.endif 告诉汇编器按照表达式值的 条件汇编一段代码。.loop/.break/.endloop 告诉汇编器按照表达式的值 循环汇编一段代码。,汇编伪指令,.global符号名1,符号名n定义全局符号,在连接 时可

12、为其他文件使用。其作用相当于.def、.ref效果之和。.mlib 向汇编器提供一个包含了宏定义的文档库的名称。当汇编器见到一个在当前库中没有定义的宏,就在.mlib 确认的宏库中查找。,7)汇编时符号定义伪指令,.asg“character string”substitution symbol 把字符串赋给替代符号。.equ/.set把常数赋给符号,存放在符号表中,且不能够 被清除。如 IMR.set 0000H。.eval 计算一个表达式的值并把结果传送到一个与替代 符号等同的字符串中。.label 定义一个特殊的符号,表示段内装载时的地址。.struct/.endstruct 建立一个类

13、似C语言结构的定义。.tag 给类似于C的结构特性分配一个标号。,汇编伪指令,8)其他汇编伪指令,.algebraic 告诉汇编器输入文件是代数指令源代码。.end 结束汇编。.mmregs 定义存储器映射寄存器的替代符号,这样就 可以用AR0、PMST等助记符替换实际的存储器地址。.version 确定所用指令系统的DSP名。.emsg 把用户定义的错误信息发送到标准输出设备中,并增加错误计数,阻止汇编器产生目标文件。.mmsg 把汇编信息发送到标准输出设备中,不设置计数。.wmsg 把警告信息发送到标准输出设备中,增加警告计数。,汇编伪指令,常用汇编伪指令,汇编伪指令,汇编宏指令,3.4

14、汇编宏指令,宏语言的主要功能包括:1)定义自己的宏和重新定义已存在的宏;2)简化较长的或较复杂的汇编代码;3)访问归档器创建的宏库;4)处理一个宏中的字符串;5)控制宏扩展列表。,使用一个宏分3个过程:定义宏、调用宏和扩展宏。1、宏定义 在源文件的开始,或者在.include/.copy文件中定义宏,格式为:宏名.macro 形参1,形参2,形参3,助记符指令与宏指令.endm 在宏库中定义宏 宏库是由文档管理器建立的,采用归档格式的文件集合。归档文件(宏库)的每一个成员可包含一个与成员名相 对应的宏定义。可通过使用.mlib伪指令来访宏库。,汇编宏指令,汇编宏指令,2、宏调用 对宏定义的调用

15、称为宏调用,由一条宏指令实现:宏定义名 实参表 实参表中的每一项为实际参数,相互之间用逗号隔开。3、宏扩展 当源程序被汇编时,汇编程序对每个宏调用作宏展开。宏展开就是用宏定义体取代源程序中的宏指令,而且用实 参取代宏定义中的形参。取代时实参和形参应该一一对 应,即第一个实参取代第一个形参,第二个实参取代第二 个形参,依次类推。在默认的情况下,宏扩展将出现在列 表文件中,可通过.mnolist伪指令来关闭宏扩展清单。,汇编宏指令,例3-1:宏定义、宏调用和宏展开的一个例子。*add3*ADDRP=P1+P2+P3;说明宏功能 add3.macro p1,p2,p3,ADDRP;定义宏 LD p1

16、,A;将参数1赋给A ADD p2,A;将参数2与A相加 ADD p3,A;将参数3与A相加 STL A,ADDRP;将累加器A的低字存入参数4.endm;结束宏.global abc,def,ghi,adr;定义全局符号 add3 abc,def,ghi,adr;调用宏 LD abc,A;宏展开 ADD def,A ADD ghi,A STL A,adr,汇编宏指令,例3-2:编写计算y=a1*x1+a2*x2+a3*x3+a4*x4 的汇编源程序*example.asm y=a1*x1+a2*x2+a3*x3+a4*x4*.title“example.asm”.mmregs Stack.u

17、sect“STACK”,10h.bss a,4.bss x,4.bss y,1.def _c_int00.datatable:.word 1,2,3,4.word 8,6,4,2.text,汇编宏指令,_c_int00:STM#0,SWWSR STM#stack+10h,SP STM#a,AR1 RPT#7 MVPD table,*AR1+CALL SUMend:B endSUM:STM#a,AR3 STM#x,AR4 RPTZ A,#3 MAC*AR3+,*AR4+,A STL A,y RET.end,3.5 公共目标文件格式的一般概念,公共目标文件格式的一般概念,汇编器和链接器建立的目标文

18、件,是一个可以在TMS320C54x器件上执行的文件。这些目标文件的格式称之为公共目标文件格式,即COFF(Common Object File Format)格式。,3.5.1 COFF文件中的段,1、段的定义 段:连续占有存储空间的一个数据或代码块。一个目标文件中的每一个段都是分开的和各不相同的。所有的COFF格式目标文件都至少包含以下3种 形式的段:.text 段 此段通常包含可执行代码;.data 段 此段通常包含初始化数据;.bss 段 此段通常为未初始化变量保留存储空间。,公共目标文件格式的一般概念,公共目标文件格式的一般概念,2、段的分类,1)已初始化段 已初始化段中包含有数据或

19、程序代码。.text段和.data段都是已初始化段;用.sect汇编命令建立的自定义段也是已初始化段。2)未初始化段 作用:是为未初始化数据保留存储空间。.bss 段是未初始化段;用汇编命.usect 建立的自定义段也是未初始化段。,公共目标文件格式的一般概念,目标文件中的段与目标存储器之间的关系,.bss,.data,.text,RAM,E2PROM,ROM,公共目标文件格式的一般概念,汇编器的任务:在汇编过程中,根据汇编命令用适当的段将各部分 程序代码和数据连在一起,构成目标文件。汇编器靠5条命令识别汇编语言程序的各个部分:.bss 末初始化段;.usect 未初始化自定义段;.text

20、已初始化段;.data 已初始化段;.sect 已初始化自定义段。,3.5.2 汇编器对段的处理,公共目标文件格式的一般概念,1、未初始化段,建立未初始化段的两条命令的句法如下:.bss 符号,字数 符号.usect“段名”字数,对应于保留的存储空间第一个字的变量名称。这个符号可以让其他段引用,也可以用.global命令定义为全局符号。,段中保留多少个存储单元,程序员为自定义未初始化段起的名字,当汇编器遇到.bss或.usect命令时,并不结束当前段的汇编,只是暂时从当前段脱离出来开始对新的段进行汇编。.bss和.usect命令可以出现在一个已初始化段的任何位置,而不会对它的内容发生影响。,公

21、共目标文件格式的一般概念,2、已初始化段,建立己初始化段的3条初始化命令的句法如下:.text 段起点.data 段起点.sect“段名”段起点,程序员为自定义未初始化段起的名字,任选项。如选用,它就是为段程序计数器(SPC)定义的一个起始值。SPC值只能定义一次,而且必须在第一次遇到这个段时定义。如缺省,则SPC从0开始。,当汇编器遇到.text 或.data 或.sect命令时,将停止对当前段的汇编,然后将紧接着的程序代码或数据汇编到指定的段中,直到再遇到另一条.text 或.data 或.sect命令为止。,公共目标文件格式的一般概念,3、子段,子段是大段中的小段。子段命名的句法为:基段

22、名:子段名例如,若要在.text段内建立一个称之为_func的子段,可以用如下命令:.sect“.text:_func”子段也有2种:用.sect命令建立的是已初始化段;用.usect命令建立的段是未初始化段;,公共目标文件格式的一般概念,4、命名段,缺省段由.text、.data和.bss命令建立,伪指令本身就 是段名;自定义段是由.sect和.usect命令建立,需要自己定义段名;不要把两个伪指令当做段名;不能用不同的伪指令处理名字相同的段。,5、段程序计数器(SPC),SPC表示一个程序代码段或数据段内当前的地址。链接器在链接时要对每个段进行重新定位。,公共目标文件格式的一般概念,【例3

23、-3】段命令应用举例,.title“example.asm”*Assemble an initialized table into.data*.datacoeff.word 011h,022h,033h*Reserve space in.bss for a variable*.bss buffer,10*still in.data*ptr.word 044h,.data,011h,022h,033h,044h,coeff,ptr,.bss,buffer,Buffer+1,Buffer+9,公共目标文件格式的一般概念,*Assemble code into the.text section*.t

24、extadd:LD#0,DP;1 word LD#2,A;1 word ADD 60H,A;1 word*Another initialized table into.data*.dataivals.word 0AAh,0BBh,0CCh*Define another section for more variables*var2.usect“newvars”,1inbuf.usect“newvars”,7*Define a named section for int.vectors*.sect“vectors”.word 011h,033h,.text,LD,LD,ADD,add,.data

25、,011h,022h,033h,044h,0AAh,0BBh,0CCh,coeff,ptr,ivals,newvars,var2,inbuf,inbuf+6,vectors,011h,033h,公共目标文件格式的一般概念,汇编语言源程序经过汇编后,共建立了5个段:.text段 文本段,段内有3个字可执行的程序代码。.data段 已初始化的数据段,段内有7个字的数据。vectors段用.sect命令生成的命名段,段内有2个字的 初始化数据。.bss段 未初始化的数据段,在存储器中为变量 保留10个存储单元。newvars段用.usect命令建立的命名段,为变量保留 8个存储单元。,公共目标文件格

26、式的一般概念,主要功能:根据链接命令或链接命令文件(.cmd文件),将一个或多个COFF目标文件(.obj文件)链接起来,生成存储器映象文件(.map)和 可执行的输出文件(.out)(COFF目标模块)。,链接器建立的是绝对地址COFF文件,即.out文件,3.5.3 链接器对段的处理,公共目标文件格式的一般概念,两个任务:1)把一个或多个COFF目标文件(.obj文件)中的各种段 作为链接器的输入段,经链接后在一个可执行的 COFF输出模块中建立各个输出段。2)在程序装入时对其重新定位,为各个输出段选定 存储器地址。,命令支持:1)MEMORY 命令。此条命令用来定义目标系统的存储器配置空

27、间,包括对 存储器各部分命名,以及规定它们的起始地址和长度;2)SECTIONS 命令。此命令告诉链接器如何将输入段组合成输出段,以及 将输出段在存储器中的什么位置。,公共目标文件格式的一般概念,1、默认的存储器分配,在默认的方式下,链接器将从存储器的0080h开始,对组合后的各段进行存储器配置。,默认的存储器分配过程:,.text,.text1,.text2,.data,.data1,.data2,.bss,.bss1,.bss2,table,table_1,table_2,u_vars1,u_vars1,u_vars2,FFT,FFT,没有使用,没有配置,没有配置,没有使用,公共目标文件格

28、式的一般概念,2、将段放入存储器空间,若不采用默认的方式,通常需要建立一个链接命令文件,在命令文件中用MEMORY和SECTIONS伪指令定义存储器和配置段地址。,公共目标文件格式的一般概念,(1)键盘命令:lnk500,链接器会提示如下信息:,Command files:Object files.obj:Output Files a.out:Options:,(要求键入一个或多个命令文件),(要求键入一个或多个需要链接的目标文件),(要求键入一个链接器所生成的输出文件名),(要求附加一个链接选项),3.5.4 链接器命令文件(工程脚本文件),公共目标文件格式的一般概念,(2)键入命令:,ln

29、k500 file1.obj file2.obj-o link.out,在命令行中指定选项和文件名。目标文件:file1.obj、file2.obj 命令选项:-o 输出文件:link.out 将两个目标文件进行链接,生成一个可执行的输出文件link.out。,公共目标文件格式的一般概念,(3)命令文件控制方式:,lnk500 文件名.cmd,例如:希望完成第二种命令的链接,在链接命令文件中,应包含如下内容:file1.obj file2.obj-o link.out,公共目标文件格式的一般概念,1、链接器选项,公共目标文件格式的一般概念,公共目标文件格式的一般概念,2、链接器命令文件格式,a

30、.obj b.obj/*输入文件名*/-o prog.out/*链接器选项*/-m prog.map/*链接器选项*/,MEMORY/*MEMORY 命令*/PAGE0:ROM:origin=1000h,length=0100h PAGE1:RAM:origin=0100h,length=0100h,SECTIONS/*SECTIONS 命令*/.text:ROM.data:ROM.bss:RAM,输入输出定义,描述系统硬件资源,描述段如何定位,公共目标文件格式的一般概念,链接命令文件可包含以下内容:(1)输入文件名,用来指定目标文件、存档库或 其他命令文件。(2)链接器选项,它们在命令文件中

31、的使用方法 与在命令行中相同。(3)MEMORY和SECTIONS链接伪指令,用来指定 目标存储器结构和地址分配。,公共目标文件格式的一般概念,注意:(1)注释的内容应当用/*和*/符号括起来。(2)如果程序中有C语言,则在cmd文件的输入输出部分 应该加上:-l rts.lib语句。(3)如果程序中有C语言,则在cmd文件的输入输出部分 应该加上:-c。(4)在链接器命令文件中,不能采用下列符号作为段名或 符号名,align DSECT len o run ALIGN f length org RUN attr fill LENGTH origin SECTIONS ATTR FILL lo

32、ad ORIGIN spare block group LOAD page type BLOCK GROUP MEMORY PAGE TYPE COPY l(小写L)NOLOAD range UNION,公共目标文件格式的一般概念,3、MEMORY命令,功能:MEMORY命令用来定义目标系统中实际存在的并且可在程序中使用的存储器区间,包括对存储器各部分命名,以及规定它们的起始地址和长度。,注意:“MEMORY”必须大写,MEMORYPAGE 0:name 1(attr):origin=constant,length=constantPAGE n:name n(attr):origin=cons

33、tant,length=constant,MEMORY命令的一般句法,公共目标文件格式的一般概念,MEMORYPAGE 0:name 1(attr):origin=constant,length=constantPAGE n:name n(attr):origin=constant,length=constant,对一个存储空间加以标记,每一个PAGE代表一个完全独立的地址空间。页号n最多可规定为255,取决于目标存储器的配置。通常PAGE 0定为程序存储器,PAGE 1定为数据存储器。如果没有规定PAGE,则链接器就把目标存储器配置在PAGE 0。,可以包含18个字符,AZ,az,$,.,_

34、均可。名字并没有特殊的含义,用来标记存储器的区间而已;不同PAGE上的存储器区间可以取相同的名字,但在同一PAGE内的名字不能相同,且不许重叠配置。,任选项,为命名区规定14个属性。如果有选项,应写在括号内。属性选项一共有4项:R 规定可以对存储器执行读操作。W 规定可以对存储器执行写操作。X 规定存储器可以装入可执行的程序代码。I 规定可以对存储器进行初始化。没有规定属性的存储器都默认有全部4项属性。,规定一个存储区的起始地址。键入origin、org或o都可以。这个值是一个16位二进制常数,可以用十进制数、八进制数或十六进制数表示。,规定一个存储区的长度,键入length、len或l都可以

35、。这个值是一个16位二进制常数,可以用十进制数、八进制数或十六进制数表示。,公共目标文件格式的一般概念,【例3-4】用MEMORY伪指令编写连接命令文件。要求:程序存储器:4K字ROM,起始地址为C00h,取名为ROM。数据存储器:32字RAM,起始地址为60h,取名为SCR。512字RAM,起始地址为80h,取名为CHIP。,file1.obj fiel2.obj-o Prog.out MEMORY PAGE 0:ROM:origin=C00h,length=1000h PAGE 1:SCR:origin=60h,length=20h CHIP:origin=80h,length=200h,

36、两个输入文件,链接命令选项,指令字,页面名称,区间名称,起始地址,区间长度,file1.obj fiel2.obj-o Prog.out MEMORYPAGE 0:ROM:org=C00h,len=1000hPAGE 1:SCR:org=60h,len=20h CHIP:org=80h,len=200h,PAGE 0:ROM:org=C00h,len=1000h,00C00h,1000h,01C00h,ROM,PAGE 1:SCR:org=60h,len=20h,00060h,0007Fh,20h,SCR,CHIP:org=80h,len=200h,00080h,200h,0027Fh,CHI

37、P,公共目标文件格式的一般概念,公共目标文件格式的一般概念,4、SECTIONS命令,SECTIONS命令的任务如下:告诉链接器如何将输入段组合成输出段 在可执行程序中定义输出段 规定输出段在存储器中的存放位置 允许重新命名输出项。,SECTIONSname:property,property,property,name:property,property,property,name:property,property,property,SECTIONS命令的一般句法,性能参数,段名,注意:SECTIONS命令用大写字母,紧随其后并用大括号括起来的是关于输出段的详细说明。,公共目标文件格式的一

38、般概念,性能参数包括:1)load allocation:定义将输出段加载到存储器中的什么位置。句法:load=allocation 或者 allocation 或者 allocation,其中allocation是关于输出段地址的说明,即给输出段分配的存储单元的首地址。,公共目标文件格式的一般概念,多种书写形式:.text:load=0 x1000 将.text段定位到一个特定地址。.text:ROM 将.text段定位到名为ROM的存储区。.bss:(RW)将.bss段定位到属性为R,W的存储区。.text:align=0 x80 将.text定位到0 x80开始的存储区。.bss:loa

39、d=block(0 x80)将.bss定位到一个n字存储器块的 任何一个位置(n为 2的幂次)。.text:PAGE 0 将输出段.text定位到PAGE 0。如果要用到一个以上参数,可以将它们排成一行,如:.text:ROM align(16)PAGE(2)也可用括号括起来:.text:load=(ROM align(16)PAGE(2),公共目标文件格式的一般概念,2)Run allocation:用来定义输出段在存储器的什么位置上开始运行。句法:run=allocation 或者:runallocation,注意:链接器为段在目标存储器中分配两个地址:加载程序的地址由装入存储器分配完成

40、执行程序的地址由运行存储器分配完成若要想把程序的加载区分开,则用SECTIONS命令让链接器对这个段定位两次即可。例如:.text:load=ROM,run=RAM,公共目标文件格式的一般概念,3)Input sections:用来定义由哪些输入段组成输出段。句法:input_sections 大多数情况下,在SECTIONS命令中是不列出每个输入文件的输入段的段名的:SECTIONS.text:.data:.bss,公共目标文件格式的一般概念,用文件名和段名来明确地规定输入段,其格式如下:SECTIONS.text:/*建立.text 输出段*/f1.obj(.text)/*链接源于f1.o

41、bj的.text段*/f2.obj(sec1)/*链接源于f2.obj的sec1段*/f3.obj/*链接源于f3.obj的所有段*/f4.obj(.text,sec2)/*链接源于f4.obj的.text段和sec2段*/,4)段的类型用于为输出段定义特殊形式的标记。语法格式:type=COPY 或 type=DSECT 或 type=NOLOAD 5)充填值用于对未初始化空单元定义一个数值。语法格式:fill=value 或 name:=value,公共目标文件格式的一般概念,公共目标文件格式的一般概念,【例3-5】SECTIONS指令的使用。file1.obj file2.obj-o P

42、rog.out SECTIONS.text:load=ROM,run=800h.con:load=ROM.bss:load=RAM.vec:load=FF80h t1.obj(.int1)t2.obj(.int2).data:load=RAM,两个输入文件,链接命令选项,指令字,输出段说明语句,公共目标文件格式的一般概念,【例3-5】SECTIONS指令的使用。file1.obj file2.obj-o Prog.out SECTIONS.text:load=ROM,run=800h.con:load=ROM.bss:load=RAM.vec:load=FF80h t1.obj(.int1)t

43、2.obj(.int2).data:load=RAM,输出段,加载地址,运行地址,.text,ROM,RAM 800h,.con,ROM,.bss,RAM,.vec,ROM FF80,.data,RAM,公共目标文件格式的一般概念,【例3-5】SECTIONS指令的使用。file1.obj file2.obj-o Prog.out SECTIONS.text:load=ROM,run=800h.con:load=ROM.bss:load=RAM.vec:load=FF80h t1.obj(.int1)t2.obj(.int2).data:load=RAM,.text,.con,.bss,.ve

44、c,.data,FF80h,运行时,800h,.text,.text,.text,公共目标文件格式的一般概念,5、MEMORY和SECTIONS命令的默认算法,MEMORYPAGE 0:PROG:origin=0 x0080,length=0 xFF00PAGE 1:DATA:origin=0 x0080,length=0 xFF80SECTIONS.text:PAGE=0.data:PAGE=0.cinit:PAGE=0.bss:PAGE=1,公共目标文件格式的一般概念,例3-6 链接器对段的处理应用举例:.title“example.asm”.datacoeff.word 011h,022

45、h,033h.bss buffer,10ptr.word 044h.textadd:LD#0,DP;1 word LD#2,A;1 word ADD 60H,A;1 word.dataivals.word 0AAh,0BBh,0CChvar2.usect“newvars”,1inbuf.usect“newvars”,7.sect“vectors”.word 011h,033h,公共目标文件格式的一般概念,/*example.cmd*/-o example.out-m example.mapMEMORY PAGE 0:EPROM:org=0E000h,len=100h VECS:org=0FF8

46、0h,len=04h PAGE 1:SPRAM:org=0060h,len=20h DARAM:org=0080h,len=100hSECTIONS.text:EPROM PAGE 0.data:EPROM PAGE 0.bss:SPRAM PAGE 1 newvars:DARAM PAGE 1 vectors:VECS PAGE 0,公共目标文件格式的一般概念,公共目标文件格式的一般概念,程序存储器,0000H,FFFFH,E000H,E0FFH,EPROM,数据存储器,0000H,FFFFH,60H,7FH,SPRAM,80H,17FH,DARAM,FF80H,FF83H,VECS,.te

47、xt,.data,vectors,.bss,newvars,C语言程序设计概述,3.6 C 语言程序设计概述,.cmd文件的输入输出定义部分必须包含语句:-lrts.lib,3.6.1 数据类型,C语言程序设计概述,C语言程序设计概述,1、常量使用C语言中const关键字或采用宏定义的方法定义常量。不能使用C语言的关键字作为常量名,常量名以字母或下划线开头,最多可以有100个字符。,2、变量变量名应符合C语言关于变量名的要求,注意不能使用C语言的关键字作为变量名,应以字母或下划线开头,变量名最长可以有100个字符。,C语言程序设计概述,4、volatile类型变量在编写C语言程序时,如果存在一

48、些依赖于存储区访问的代码,则需要使用关键字volatile来确定这些访问,这样就可以使这些代码不参与代码优化,从而保证了程序按照最基本的功能执行。,3、端口变量端口变量在C54x中的定义格式为:ioport type porthex_num在使用端口变量的时候,需要注意如下几点:1)必须在文件中声明,不能在函数中使用关键字ioport。2)可以用于程序中的幅值、计算等语句。3)在函数调用的时候,端口变量采用的是传递数值方式而 不是传递地址方式,即传送到是数值而不是地址。,1、局部变量和全局变量,局部变量:只在本函数范围内有效,也只有在函数内 才能使用的变量;全局变量:在函数之外定义、有效范围是

49、从定义变量 的位置开始到文件结束的变量。,C语言程序设计概述,3.6.2 变量的作用域和生存期,C语言程序设计概述,2、动态存储变量和静态存储变量,静态存储区保存全局变量,程序开始执行时分配空间,程序执行完毕释放空间。动态存储区保存函数调用时的形式参数变量、现场保护 和返回地址等,还有未加static说明的局部变量。这些数据,在函数调用开始时分配空间,函数结束时 释放空间。对数据和函数的存储类别具体划分,可以分为四种:自动的(auto)静态的(static)寄存器的(register)外部的(extern)。,C语言程序设计概述,1)自动的(auto)任何一个文件中定义的数据和函数,缺省类型都

50、是auto。2)静态的(static)static type varid;3)寄存器的(register)register type regid4)外部的(extern)如果数据或函数在另外的文件中定义,则在使用文件中该数据应申明是extern。,C语言程序设计概述,1、已初始化段包括:.text:存放C程序代码,放在ROM和RAM中均可,一般属于Page0。.switch:存放C程序中switch语句产生的跳转地址表。放在ROM和RAM中均可,一般属于Page0。.cinit:存放C程序中变量的初始值和常量,放在 ROM和RAM中均可,一般属于Page0。.const:存放C程序中的字符常量

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号