您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > DSP第4章程序开发
第四章DSP软件开发软件开发过程一个DSP软件可以使用汇编或C语言编写源程序,通过编译、连接工具产生DSP的执行代码。在调试阶段,可以利用软仿真(Simalator)在计算机上运行;也可以利用硬件调试工具(xps510)将代码下载到DSP中,并通过计算机监控、调试该程序。当调试完成后,可以将程序代码固化到EPROM中,以便DSP目标系统脱离计算机单独运行。代码生成工具:1.C编译器(CCompiler):将C源程序代码编译成为C54x汇编语言源代码程序。在编译软件包中包括一个外壳程序(Shellprogram)、一个优化器(Optimizer)和一个内部列表公用程序(Interlistutility)。其中,外壳程序能自动编译、汇编、连接源模块。优化器能改进代码来提高C程序的效率。内部列表公用程序能将C源程序同汇编语言输出相结合。2.汇编器(Assembler):将汇编语言源文件转变为基于公用目标文件格式(COFF)的机器语言目标文件。源文件中包括指令、汇编命令以及宏命令。汇编器的输入文件为汇编语言源文件,其默认的文件扩展名为.asm。由汇编器所建立的目标文件的默认扩展名为.obj。由汇编器建立的列表文件的默认扩展名为.lst。3.连接器(Linker):将汇编生成的、可重新定位的COFF目标模块组合成一个可执行的COFF目标模块。连接器的输入是可重新定位的COFF目标文件和目标库文件。当连接器生成可执行模块时,它要调整对符号的引用,并解决外部引用的问题。它也可以接受来自文档管理器中的目标文件,以及连接以前运行时所生成的输出模块。4.文档管理器(Archiver):将一组文件(包括源文件或目标文件)集中归入一个文档文件库。利用文档管理器,可以方便地替换、添加、删除和提取文件来调整库,其最有用的应用之一是建立目标文件库,C编译器自带有目标文件库。汇编时,可以搜索宏文件库,并通过源文件中的宏命令来调用。例如:将若干宏归入一个宏库,汇编器搜索这个库,并调用源文件中使用的宏。5.助记符到代数式指令翻译器(Mnemonic-to-algbraictranslatorutility):将包含助记符指令的汇编语言源文件转换成包含代数指令的汇编语言源文件。6.运行支持库公用程序(Runtime-suportutility):建立用户的C语言运行支持库。标准运行支持库在rts.src里提供源代码,在rts.lib里提供目标代码。包含ANSI标准运行支持函数、编译器公用程序函数、浮点算术函数和被C54x编译器支持的C输入/输出函数。7.建库实用程序(Library-buildutility):用来建立用户自己的、C语言编写的支持运行的库函数。链接时,用rts.src中的源文件代码和rts.lib中的目标代码提供标准的支持运行的库函数。8.十六进制转换程序(Hexconversionutlity):可以很方便地将COFF目标文件转换成TI、Intel、Motorola或Tektronix公司的目标文件格式。转换后生成的文件可以下载到EPROM编程器,以便对用户的EPROM进行编程。9.绝对制表程序(Absolutelister):将链接后的目标文件作为输入,生成.abs输出文件。对.abs文件汇编产生包含绝对地址而不是相对地址的清单。如果没有绝对制表程序,所生成清单可能是冗长的,并要求进行许多人工操作。10.交叉引用制表程序(Cross-referencelister):利用目标文件生成一个交叉引用清单,列出所链接的源文件中的符号以及它们的定义和引用情况。11.C54x调试器:接收可执行的COFF文件作为输入,但大多可擦除存储器却不支持COFF文件。汇编语言程序的编写方法要点以.asm为扩展名每一行由4个部分组成格式[标号][:]空格[助记符]空格[操作数]空格[;注释][]中的内容为可选择部分供本程序的其它部分或其它程序调用。标号是任选项,标号后面可以加也可以不加冒号“:”。在编写汇编语句时,应遵循以下规则:语句的开头只能是标号、空格、星号或分号。标号是可选项;如果使用,必须从第一列开始。每个域必须由一个或多个空格来分开。制表符等同于空格。注释是可选项。开始于第一列的注释用星号或分号(*或;)来标明,开始于其它列的注释必须由分号开头。要点建议[标号][:]空格[助记符]空格[操作数]空格[;注释]可以是助记符指令、汇编指令、宏指令和宏调用命令。1.助记符指令,一般用大写;2.汇编命令和宏命令,以句号“.”开始,且为通常用小写。要点[标号][:]空格[助记符]空格[操作数]空格[;注释]1.指令中的操作数或汇编命令中定义的内容2.操作数之间必须用逗号“,”分开。1.从分号“;”开始2.可以放在指令或汇编命令后面,也可以放在单独的一行或数行。要点汇编语言程序中的数据型式有下列几种:二进制:如1110001b或1111001B;八进制:226q或572Q;十进制:1234或+1234或-1234(缺省型)十六进制:0A40h或0A40H或0xA40浮点数:1.623e-23(仅C语言程序中能用,汇编程序不能用)字符:‘D’字符串:“thisisastring”汇编器和链接器建立的目标文件,是一个可以TMS320C54x器件上执行的文件。这些目标文件的格式称之为公共目标文件格式,即COFF(CommonObjectFileFormat)。COFF会使模块编程和管理变得更加方便,因为当编写一个汇编语言程序时,它可以按照代码和数据段来考虑问题。汇编器和链接器都有一些命令建立并管理各种各样的段。公共目标文件格式COFF建立公共目标文件格式的目标文件汇编器和链接器功能的异同相同点不同点汇编器建立的是相对地址COFF文件,即.obj文件链接器建立的是绝对地址COFF文件,即.out文件汇编器根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件;链接器的一个任务就是分配存储单元,即把各个段重新定位到目标存储器中。不同种类的区别COFF文件种类C54x汇编器和C编译器建立的是COFF2文件。C54x能够读/写所有形式的COFF文件,缺省值下链接器生成的是COFF2文件,用链接器-vn选项可以选择不同形式的COFF文件。COFF0COFF1COFF2标题格式不相同数据部分是相同汇编指令汇编指令(伪指令)是用来为程序提供数据和控制汇编进程的。C54x汇编器共有64条汇编命令。将代码和数据汇编到特定的段中。为未初始化的变量保留存储器空间。控制展开列表的形式。存储器初始化。汇编条件块。定义全局变量。(1)段定义指令.bass在.bass段中为未初始化的变量保留存储器空间.date确认.bass段中的代码段。.bass段中通常包含了初始化的数据。.sect定义初始化的带命名的段,并将紧接着的代码或数据并入该段。.text该段中包含了可执行的代码.usect在一个未初始化的有命名的段中保留空间(2)常数初始化指令.bes和.space在当前段保留确定数目的位。当在.space段使用了标号时,它指向保留位的第一个字;当在.bes段使用了标号时,它指向保留位的最后一个字。.byte把一个8位值放入当前段的连续字中。.filed把一个数放入当前字的特定数目的位中。.float和.xloat计算以IEEE格式表示的单精度(32位)浮点数,并存放在当前段的连续字中,高位字先存。.int和.word把一个或多个16位数存放在当前段的连续字中。.long和.xlong把32位数存放在当前段的连续的两个字中,高位字先存。.string和.pstring把8位的字符从一个或多个字符串中传到当前段中。(3)段程序计数器定位指令.align使SPC对准1-word到128-word的边界。保证了紧接着该指令的代码从一个整字或页边界开始。操作数:1让SPC对准字边界2让SPC对准长字/偶地址边界128让SPC对准页边界不带操作数时,确省值为128。(4)输出列表格式指令.drlist/.drnolist.fclist/.fcnolist.length.width.list/.nolist.mlist/.mnolist.option.page.title.sslist/.ssnolist(5)引用其他文件的指令.copy/.include告诉汇编器器开始从其他文件中读源语言。.def确认一个在当前模块中定义的且被其他模块使用的符号。.global声明一个外部符号,使其他模块在连接的时候可以使用它。.mlib向汇编器提供一个包含宏定义的文档库的名称。.ref确认一个在当前段中使用但在其它段中定义的符号。(6)条件汇编指令.if/.elseif/.else/.endif告诉汇编器根据表达式的值条件汇编一块代码。.loop/.break/.endloop告诉汇编器按照表达式的值循环汇编一块代码。.loopexpression标注一块循环代码的开始。.breakexpression告诉汇编器当表达式为假时,继续循环汇编;当表达式为真时,立即转到.endloop后面懂得代码去。(7)汇编时的符号指令使有意义的符号名与常数值或字符串相等同。.asg规定一个字符串与一个替代符号相等,并将其存放在替代符号表中。.eval计算一个表达式的值并把结果传送到与一个替代符号等同的字符串中。.label定义一个专门的符号以表示当前段内装入时的地址而不是运行时的地址。.set/.equ把一个常数值等效成一个符号,存放在符号表中且不能被清除。(8)其他方面的汇编指令.algebraic.end.mmregs.newblock.sblock.version汇编程序的编辑与汇编和链接汇编语言源程序编好后,必须经过汇编和链接才能运行。汇编语言程序的汇编汇编语言源程序要素汇编命令助记符指令宏命令汇编程序(汇编器)功能将源程序汇编成可重定位的目标文件(.obj文件);如果需要,可以生成一个列表文件(.lst文件);将程序代码分段,每段的目标代码都有一个SPC管理;定义和引用全局符号,可在列表后附加交叉引用表;对条件程序块进行汇编;支持宏功能,允许定义宏命令。段(sections)的概念特点定义分段的优点:在目标文件中将放置程序、数据、变量的代码分开,便于在链接时作为一个单独的部分分配存储器。由于大多数系统都有好几种形式的存储器,通过对各个段重新定位,可以使目标存储器得到更为有效的利用。段是在存储器图中占据相邻空间的代码或数据块。一个目标文件中的每一个段都是分开的和不相同的。目标文件中的段与目标存储器之间的关系所谓段,就是在存储器图中占据相邻空间的代码或数据块。一个目标文件中的每一个段都是分开的和不相同的。所有的COFF目标文件都包含以下3种形式的段:.text段(此段通常包含可执行代码).data段(此段通常包含初始化数据).bss段(此段通常为未初始化变量保留存储空间)此外,汇编器和链接器可以建立、命名和链接自定义段。这种自定义段是程序员自己定义的段,使用起来与.data、.text以及.bss段类似。它的好处是在目标文件中与.data、.text以及.bss分开汇编,链接时作为一个单独的部分分配到存储器。段有两类:(1)未初始化段:.bss和.usect命令建立未初始化段。未初始化段就是C54x存储器中的保留空间,通常将它们定位到RAM区。在目标文件中,这些段中没有确切的内容;在程序运行时,可以利用这些存储空间存放变量。这两条命令的句法为:.bss符号,字数符号.usect“段名”,字数其中:符号:对应于保留的存储空间第一个字的变量名称。这个符号可以让其它段引用,也可以用.global命令定义为全局符号。字数:表示在.bss段或标有名字的段中保留多少个存储单元。段名:程序员为自定义未初始化段起的名字。(2)已初始化段:.text、.data的.sect命令建立已初始化段。已初始化段中包含有可执行代码或初始化数据。这些段中的内容都在目标文件中,当加载程序时再放到C54x的存储器中
本文标题:DSP第4章程序开发
链接地址:https://www.777doc.com/doc-559130 .html