TMS320C54x软件开发过程DSP原理与开发实例.ppt
《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个存储单元。,公共目标文件格
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TMS320C54x 软件 开发 过程 DSP 原理 实例
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6522023.html