2020年6月22日DSP原理及应用1第4章汇编语言程序开发工具内容提要可编程DSP芯片开发需要一套完整的软、硬件开发工具。通常可分成代码生成工具和代码调试工具两大类。代码生成工具是指将高级语言或汇编语言编写的DSP程序转换成可执行的DSP芯片目标代码的工具程序,主要包括汇编器、链接器和C编译器以及一些辅助工具程序等。代码调试工具包括C/汇编语言源码调试器、仿真器等。本章主要介绍代码生成工具,包括’C54x软件开发流程、汇编语言程序的编写、编辑、汇编和链接过程、COFF段的一般概念、汇编器和链接器处理段的方法以及程序的重定位等。2020年6月22日DSP原理及应用2第4章汇编语言程序开发工具4.1TMS320C54x软件开发过程4.2汇编语言程序的编辑、汇编和链接过程4.3COFF的一般概念4.4源程序的汇编4.5链接器的使用2020年6月22日DSP原理及应用3第4章汇编语言程序开发工具4.1TMS320C54x软件开发过程’C54x的应用软件开发主要完成以下工作:(1)选择编程语言编写源程序’C54x提供2种编程语言,即汇编语言和C/C++语言。对于完成一般功能的代码,这两种语言都可使用,但对于一些运算量很大的关键代码,最好采用汇编语言来完成,以提高程序的运算效率。(2)选择开发工具和环境’C54x提供了两种开发环境。即非集成开发环境和集成开发环境CCS。2020年6月22日DSP原理及应用4第4章汇编语言程序开发工具4.1TMS320C54x软件开发过程1.’C54x应用软件开发流程’C54x应用软件的开发可在TI公司提供的开发环境中进行,用户可以用C/C++语言或汇编语言编写源文件,经C编译器、汇编器生成COFF格式的目标文件,再用链接器进行链接,生成在’C54x上可执行的目标代码,然后利用调试工具对可执行的目标代码进行仿真和调试。当调试完成后,通过Hex代码转换工具,将调试后的可执行目标代码转换成EPROM编程器能接受的代码,并将该代码固化到EPROM中或加载到用户的应用系统中,以便DSP目标系统脱离计算机单独运行。2020年6月22日DSP原理及应用5第4章汇编语言程序开发工具1.’C54x应用软件开发流程开发过程的目的是产生一个可以由’C54x目标系统执行的模块。C源文件C编译器汇编源文件汇编器汇编源文件COFF目标文件链接器可执行的COFF文件宏源文件存档器宏库存档器目标文件库建库工具运行时支持库EPROM编程器交叉引用列表器调试工具TMS320C54x绝对地址列表器HEX代码转换工具2020年6月22日DSP原理及应用6第4章汇编语言程序开发工具2.’C54x的开发工具TI公司提供的DSP开发环境和工具主要包括以下三个部分:代码生成工具代码调试工具实时操作系统2020年6月22日DSP原理及应用7第4章汇编语言程序开发工具2.’C54x的开发工具(1)代码生成工具:C编译器:用来将C/C++语言源程序自动编译为’C54x的汇编语言源程序。汇编器:用来将汇编语言源文件汇编成机器语言COFF目标文件。链接器:将汇编生成的、可重新定位的COFF目标模块组合成一个可执行的COFF目标模块。文档管理器:允许用户将一组文件(源文件或目标文件)集中为一个文档文件库。2020年6月22日DSP原理及应用8第4章汇编语言程序开发工具2.’C54x的开发工具助记符指令—代数式指令翻译器:用来将包含助记符指令的汇编语言源文件转换成包含代数式指令的汇编语言源文件。建库实用程序:用来建立用户自己使用的、并用C/C++语言编写的支持运行的库函数。十六进制转换程序:可以很方便地将COFF目标文件转换成TI、Intel、Motorola等公司的目标文件格式。(1)代码生成工具:2020年6月22日DSP原理及应用9第4章汇编语言程序开发工具2.’C54x的开发工具(1)代码生成工具:绝对制表程序:将链接后的目标文件作为输入,生成.abs输出文件。交叉引用制表程序:利用目标文件生成一个交叉引用清单,列出链接的源文件中的符号以及它们的定义和引用情况。2020年6月22日DSP原理及应用10第4章汇编语言程序开发工具2.’C54x的开发工具(2)代码调试工具:C/汇编语言源码调试器:与软件仿真器、评价模块、软件开发系统、软件仿真器等配合使用。软件仿真器:是一种模拟DSP芯片各种功能并在非实时条件下进行软件调试的调试工具,它不需目标硬件支持,只需在计算机上运行。初学者工具DSK:是TI公司提供给初学者进行DSP编程练习的一套廉价的实时软件调试工具。2020年6月22日DSP原理及应用11第4章汇编语言程序开发工具2.’C54x的开发工具(2)代码调试工具:软件开发系统SWDS:是一块PC插卡,可提供低成本的评价和实时软件开发,还可用来进行软件调试,程序可在DSP芯片上实时运行。可扩展的开发系统仿真器(XDS510):可用来进行系统级的集成调试,是进行DSP芯片软硬件开发的最佳工具。评价模块EVM板:是一种低成本的开发板,可进行DSP芯片评价、性能评估和有限的系统调试。2020年6月22日DSP原理及应用12第4章汇编语言程序开发工具4.2汇编语言程序的编辑、汇编和链接过程汇编语言源程序可以在任何一种文本编辑器中进行。如笔记本、WORD、EDIT、TC等。当汇编语言源程序编写完成后,还必须经过汇编和链接后才能运行。2020年6月22日DSP原理及应用13第4章汇编语言程序开发工具4.2汇编语言程序的编辑、汇编和链接过程示意图汇编器调试程序链接器文本编辑器.asm源文件.obj目标文件.out输出文件.cmd链接命令文件.lst列表文件.map存储器映像文件十六进制转换程序HEX500-o-m-l2020年6月22日DSP原理及应用14第4章汇编语言程序开发工具4.2汇编语言程序的编辑、汇编和链接过程1.编辑利用各种文本编辑器,如笔记本、WORD、EDIT和TC等,可编写汇编语言源程序。2.汇编当汇编语言源程序编写好以后,可利用’C54x的汇编器ASM500,对一个或多个源程序分别进行汇编,并生成列表文件(.lst)和目标文件(.obj)。2020年6月22日DSP原理及应用15第4章汇编语言程序开发工具4.2汇编语言程序的编辑、汇编和链接过程2.汇编常用的汇编命令:asm500%1-s-1-x调用汇编器命令源文件名将程序所有定义的符号放在目标文件的符号表中生成一个列表文件.lst生成一个交叉汇编表2020年6月22日DSP原理及应用16第4章汇编语言程序开发工具4.2汇编语言程序的编辑、汇编和链接过程3.链接所谓链接,就是利用’C54x的链接器LNK500,根据链接器命令文件(.cmd)对已汇编过的一个或多个目标文件(.obj)进行链接,生成输出文件(.out)和存储器映像文件(.map)。常用的汇编器命令:lnk500%1.cmdlnk500:调用链接器命令%1.cmd:链接命令文件名,该文件须指明目标文件、输入文件、输出文件、链接选项和存储器配置要求等。2020年6月22日DSP原理及应用17第4章汇编语言程序开发工具4.3COFF的一般概念汇编器和链接器生成的目标文件,是一个可以由’C54x器件执行的文件。这些目标文件的格式称之为公共目标文件格式(COFF)。在编写汇编语言程序时,COFF采用代码段和数据段的形式,以便于模块化的编程,使编程和管理变得更加方便。这些代码段和数据段简称为段。汇编器和链接器提供一些伪指令来建立和管理各种各样的段。2020年6月22日DSP原理及应用18第4章汇编语言程序开发工具4.3COFF的一般概念4.3.1COFF文件的基本单元COFF文件有3种类型:COFF0、COFF1、COFF2。每种类型的COFF文件,其标题格式都有所不同,但数据部分是相同的。链接器能够读/写所有类型的COFF文件,默认时链接器生成的是COFF2文件,采用-vn链接选项可以选择不同类型的COFF文件。’C54x汇编器和C编译器产生的是COFF2文件。2020年6月22日DSP原理及应用19第4章汇编语言程序开发工具4.3.1COFF文件的基本单元1.段(sections)是COFF文件中最重要的概念。每个目标文件都分成若干段。段——是存储器中占据相邻空间的代码或数据块。一个目标文件中的每个段都是分开的和各不相同的。COFF目标文件都包含以下3种形式的段:.text段(文本段),通常包含可执行代码;.data段(数据段),通常包含初始化数据;.bss段(保留空间段),通常为未初始化变量保留存储空间。2020年6月22日DSP原理及应用20第4章汇编语言程序开发工具4.3.1COFF文件的基本单元2.段的基本类型COFF目标文件中的段有两种基本类型。初始化段未初始化段(1)初始化段初始化段中包含有数据或程序代码。主要有:.text段——已初始化段;.data段——已初始化段;.sect段——已初始化段,由汇编器伪指令建立的自定义段。2020年6月22日DSP原理及应用21第4章汇编语言程序开发工具4.3.1COFF文件的基本单元2.段的基本类型COFF目标文件中的段有两种基本类型。(2)未初始化段在存储空间中,为未初始化数据保留存储空间。它包括:.bss段——未初始化段;.usect段——未初始化段,由汇编命令建立的命名段(自定义段)。2020年6月22日DSP原理及应用22第4章汇编语言程序开发工具4.3.1COFF文件的基本单元3.段与目标存储器的对应关系汇编器的任务:在汇编过程中,根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。链接器的任务:就是分配存储单元,将目标文件中的段重新定位到目标系统的存储器中,这一过程称为定位或分配。2020年6月22日DSP原理及应用23第4章汇编语言程序开发工具3.段与目标存储器的对应关系目标文件中的段与目标存储器之间的关系目标文件目标存储器.bss.data.textRAME2PROMROM2020年6月22日DSP原理及应用24第4章汇编语言程序开发工具4.3.2汇编器对段的处理汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。汇编器有5条伪指令可识别汇编语言程序的各个部分:●.bss●.usect●.text●.data●.sect——定义未初始化段——定义未初始化段——定义已初始化段——定义已初始化段——定义已初始化段2020年6月22日DSP原理及应用25第4章汇编语言程序开发工具4.3.2汇编器对段的处理未初始化段就是在’C54x存储器中保留空间,通常它们被定位在RAM区。在目标文件中,这些段中没有确切的内容。由这些段定义的空间仅作为临时存储空间,在程序运行时,可以利用这些存储空间存放变量。未初始化段分为默认的和命名的两种,分别由汇编器伪指令.bss和.usect产生。1.未初始化段2020年6月22日DSP原理及应用26第4章汇编语言程序开发工具(1).bss伪指令1.未初始化段用于在bss段中保留若干个空间。格式:.bss符号,字数符号——对应于保留的存储空间第一个字的变量名称。可以让其他段引用,也可以用.global命令定义为全局符号。字数——表示在bss段或标有名字的段中保留若干个存储单元。每调用一次.bss伪指令,汇编器在相应的段保留更多的空间。2020年6月22日DSP原理及应用27第4章汇编语言程序开发工具1.未初始化段(2).usect伪指令用于为指定的命名段保留若干个空间。格式:符号.usect“段名”,字数段名——程序员为未初始化的命名段定义的名字。每调用一次.usect伪指令,汇编器在指定的命名段保留更多的空间。2020年6月22日DSP原理及应用28第4章汇编语言程序开发工具4.3.2汇编器对段的处理已初始化段中包含有可执行代码或初始化数据。这些段中的内容都在目标文件中,当加载程序时再放到’C54x的存储器中。每个已初始化段都是可以重新定位的,并且可以引用其他段中所定