TMS320C54x的软件开发与设计.ppt
《TMS320C54x的软件开发与设计.ppt》由会员分享,可在线阅读,更多相关《TMS320C54x的软件开发与设计.ppt(96页珍藏版)》请在三一办公上搜索。
1、第4章 DSP的软件开发与设计,第4章 TMS320C54x的软件开发与设计,4.1 TMS320C54x软件开发过程 4.2 汇编语言程序的编辑、汇编和链接过程 4.3 COFF的一般概念,第4章 DSP的软件开发与设计,4.1 TMS320C54x软件开发过程,C54x的应用软件开发主要完成以下工作:(1)选择编程语言编写源程序 C54x提供2种编程语言,即汇编语言和C/C+语言。对于完成一般功能的代码,这两种语言都可使用,但对于一些运算量很大的关键代码,最好采用汇编语言来完成,以提高程序的运算效率。(2)选择开发工具和环境 C54x提供了两种开发环境。即非集成开发环境和集成开发环境CCS
2、。,第4章 DSP的软件开发与设计,TMS320的开发工具是一个软件包,其中包括:,C优化编译器汇编器连接器归档器交叉引用列表器十六进制转换公用程序,第4章 DSP的软件开发与设计,C优化编译器(C Compile),TI 为其TMS320系列 DSP提供了一系列的 C 编译器。将标准 C 源文件编译成为相应片种的汇编语言源代码文件。完全符合ANSI C标准带有一个完整的运行支持库使用多种先进技术来优化 C 源代码,以产生高效汇编代码。,第4章 DSP的软件开发与设计,汇编器(Assembler),将汇编语言的源程序文件汇编成为机器语言的目标程序文件,其格式为COFF(公用目标文件格式)。汇编
3、语言源程序可以包括汇编语言指令(instruction)、汇编伪指令(assembler directives)和宏指令(macro directives),第4章 DSP的软件开发与设计,连接器(Linker),连接器的基本任务是将目标文件连接在一起,产生可执行模块。连接器可以接受的输入文件包括汇编器产生的COFF目标文件、命令文件、库文件、以及已部分连接好了的文件。它所产生的可执行COFF目标模块可以装入各种开发工具,或由TMS320器件来执行,第4章 DSP的软件开发与设计,归档器(Archiver),归档器允许用户将一组文件归入一个档案文件(库)。例如,将若干个宏归入一个宏库,汇编器将
4、搜索这个库,并调用源文件中使用的宏。也可以用归档器将一组目标文件收入一个目标文件库,连接器将连接库内的成员,并解决外部引用,第4章 DSP的软件开发与设计,交叉引用列表器(Cross-Reference Lister),交叉引用列表器是一个查错的工具。它接受已经连接好的目标文件作为输入,产生一个交叉引用列表作为输出。它列出符号、符号的定义、以及它们在已经连接的源文件中的引用,第4章 DSP的软件开发与设计,十六进制转换公用程序(Hex Conversion Utility),将COFF目标文件转换成为若干种标准的文件格式:ASCII-十六进制Extended TektronixIntel MC
5、S-86Motorola Exorciser,第4章 DSP的软件开发与设计,第4章 DSP的软件开发与设计,全汇编编程:代码效率高,可直接对硬件设置;代码量较大,可读性差。全C编程:提高软件开发速度和可读性,方便软件移植;代码效率较低,硬件控制不方便。,混合编程,混合编程几种方法:(1)独立编写C/C+程序和汇编程序,分开编译或汇编形成各自的目标模块,再用链接器将C/C+模块和汇编模块链接起来。(2)在C/C+程序中直接内嵌汇编语句。(3)将C程序编译生成相应的汇编程序,手工修改和优化C编译器生成的汇编代码。,第4章 DSP的软件开发与设计,混合编程说明:,变量和函数命名规则,无论是变量还是
6、函数,在C语言和汇编中均需要说明为全局的。在C语言中需要有准确的函数原型说明。,在C语言中保持“自然”的命名,而在汇编语言中该名字需加一个下划线作为前缀。,例:C语言部分:extern int product(int*x,int*y);extern int i;,汇编部分:.global _i.global _product,第4章 DSP的软件开发与设计,混合编程说明:,变量访问规则,C程序访问由.bss定义的汇编变量:(1)汇编程序中,该变量名前要加下划线“_”;(2)汇编程序中,用.global命令将其定义为全局变量;(3)在C程序中,将变量说明为外部变量,C语言部分:extern in
7、t var;var=1;,汇编部分:.bss _var,1.global _var,第4章 DSP的软件开发与设计,混合编程说明:,变量访问规则,C程序访问不在.bss中定义的汇编常量表:(1)汇编程序中,在该常量表前加一标号(标号前要加“_”);(2)汇编程序中,将该标号定义为全局标号;(3)在C程序中,以extern的形式对该标号声明,并利用指针访 问该常量表。,C语言部分:extern int var;int*p=var;f=p1,汇编部分:.global _var_var:.word 10.word 20,第4章 DSP的软件开发与设计,混合编程说明:,变量访问规则,C程序访问用.se
8、t定义的汇编时间常数:(1)汇编程序中,在该常数名前“_”;(2)汇编程序中,将该常数名定义为全局符号;(3)在C程序中,以extern的形式对该符号声明,并用取地址运 算符“&”取该常量参与运算,C语言部分:extern int shift;#define ad(int)(,汇编部分:_shift.set 3.global _shift,第4章 DSP的软件开发与设计,混合编程说明:,变量访问规则,汇编程序访问用C程序中的变量或数组:(1)在汇编程序和C程序中,都将该变量或数组定义成外部属性。(2)在汇编中定义该变量或数组时需在前加“_”;,C语言部分:int speech_in160,sp
9、eech_out160;main(),汇编部分:.global _speech_in.global _speech_out,ld#_speech_in,b stlm b,ar2ld#_speech_out,astlm a,ar3ld#159,astlm a,brcnopnoprptb next,mvdd*ar2+,*ar3+next:,第4章 DSP的软件开发与设计,混合编程说明:,程序调用规则,寄存器使用说明:(1)辅助寄存器AR1、AR6、AR7由被调用函数保护,即可以在函数执行过程中修改,但在函数返回时必须恢复。AR0、AR2、AR3、AR4、AR5可以自由使用,即在函数执行过程中可以修
10、改,而且不必恢复。(2)堆栈指针SP在函数调用时必须予以保护,但其是自动保护的,即在返回时,压入椎栈的内容都将被全部弹出。(3)ARP在函数进入和返回时,必须为0,即当前辅助寄存器为AR0。函数执行时可以是其它值。(4)在缺省的情况下,编译器总是认为OVM为0。因此,若在汇编程序中将OVM置为1,则在返回C环境时,必须将其恢复为0。(5)其它状态位和寄存器在子程序中可以任意使用,不必恢复。,第4章 DSP的软件开发与设计,混合编程说明:,程序调用规则,参数传递说明:(1)函数调用前,将参数以逆序压入运行堆栈,即最右边的参数最先入栈,然后自右向左将参数依次入栈,最后是返回地址入栈。第一个参数(最
11、左边)放入累加器A中进行传递。(2)函数调用结束后,将返回值置于累加器A中。,编程实例以32位乘法运算为例。虽然用C/C+语言表达乘法运算较为方便和明了,但由于C/C+语言无法很好利用DSP汇编语言为实现各种乘法运算而提供的指令,使得C/C+程序效率低下。所以这里用汇编语言完成乘法运算,再用C/C+程序调用它。,第4章 DSP的软件开发与设计,编程实例(续)C语言主程序#include#include int main()extern int*MPY32(long X,long Y);/定义函数原型,返回指针值 int W4;/定义存放相乘结果的数组 int*P;int i;P=MPY32(0
12、 x11112222,0 x33334444);/函数调用/该指针指向数据存储器中,存放相乘结果单元的首地址for(i=0;i4;i+)Wi=*P+;/将相乘结果存到数组中 printf(“%xn”,Wi);/以十六进制方式输出该数组值,第4章 DSP的软件开发与设计,编程实例(续)参数传递在主程序中进行MPY32函数调用时,函数传递情形如下所示。,函数MPY32的第一参数存放在A累加器中,第二个参数在堆栈中,高16位在堆栈中的低地址,低16位在堆栈中的高地址。,函数返回地址,SP,3333h,4444h,1111h,2222h,累加器A,第4章 DSP的软件开发与设计,汇编算法简介由于16
13、bit定点DSP中没有32 bit乘法指令,要用几种16 bit乘法指令结合一定算法来进行32 bit乘法运算。关键指令有:MACSU Xmem,Ymem,src/src+=Uxmem*UymemMAC Xmem,Ymem,src/src+=xmem*ymem MPYU Smem,dst/dst=T*Usmem,第4章 DSP的软件开发与设计,编程实例(续)汇编程序.mmregs.bss x1,1.bss x0,1.bss y1,1.bss y0,1.bss w3,1.bss w2,1.bss w1,1.bss w0,1.text.global _MPY32/声明函数名为全局变量_MPY32:
14、,第4章 DSP的软件开发与设计,编程实例(续)汇编程序STM#x1,AR2/AR2指向第一个参数存放单元STM#y1,AR3/AR3指向第二个参数存放单元STM#w0,AR4/AR4指向乘法结果存放单元STH A,*AR2+/传递第一个参数STL A,*AR2LD*SP(1),A/传递第二个参数STL A,*AR3+LD*SP(2),ASTL A,*AR3SUB ALD*AR2,T/T=x0MPYU*AR3-,A/A=x0*y0STL A,*AR4-/w0=x0*y0LD A,-16,A/A=A16,低16位相乘的进位MACSU*AR2-,*AR3+,A/A+=y1*x0MACSU*AR3-
15、,*AR2,A/A+=x1*y0,第4章 DSP的软件开发与设计,编程实例(续)汇编程序STL A,*AR4-/w1=ALD A,-16,A/A=A16MAC*AR2,*AR3,A/A+=x1*y1STL A,*AR4-/w2赋值STH A,*AR4/w3赋值LD#w3,A/w3单元地址作为返回值,传递到ARET,第4章 DSP的软件开发与设计,混合编程说明:,汇编语句嵌入规则,在C程序中直接内嵌汇编语句。此种方法可以在C程序中实现C语言无法实现的一些硬件控制功能,如修改寄存器值,或在编译结果中添加注释等。嵌入汇编语句的方法比较简单,只需在汇编语句的两边加上括号和双引号,并且在括号前加上asm
16、标识符即可,即asm(“汇编语句”)。但需注意以下几点:(1)括号中的汇编语句必须以标号、空格、tab、分号开头,这和通常的汇编编程的语法一样。(2)不要在嵌入的汇编语句中使用修饰性汇编代码.text、.data等。(3)插入跳转语句和标号会产生不可预测的结果。(4)汇编语句不要改变C程序中变量的值。,asm(“ssbx xf”)asm(“*this is an assembly language comment”),练习:用C实现循环延时,用嵌入式汇编语句对XF引脚置高低电平,实现方波发生器。,第4章 DSP的软件开发与设计,4.2 汇编语言程序的编辑、汇编和链接过程,示意图,第4章 DSP
17、的软件开发与设计,4.2 汇编语言程序的编辑、汇编和链接过程,1.编辑,利用各种文本编辑器,如笔记本、WORD、EDIT和TC等,可编写汇编语言源程序。,2.汇编,当汇编语言源程序编写好以后,可利用C54x的汇编器ASM500,对一个或多个源程序分别进行汇编,并生成列表文件(.lst)和目标文件(.obj)。,第4章 DSP的软件开发与设计,4.2 汇编语言程序的编辑、汇编和链接过程,2.汇编,常用的汇编命令:,asm500%1 s l x,调用汇编器命令,源文件名,将程序所有定义的符号放在目标文件的符号表中,生成一个列表文件.lst,生成一个交叉汇编表,第4章 DSP的软件开发与设计,4.2
18、 汇编语言程序的编辑、汇编和链接过程,3.链接,所谓链接,就是利用C54x的链接器LNK500,根据链接器命令文件(.cmd)对已汇编过的一个或多个目标文件(.obj)进行链接,生成输出文件(.out)和存储器映像文件(.map)。,常用的汇编器命令:,lnk500%1.cmd,lnk500:调用链接器命令,%1.cmd:链接命令文件名,该文件须指明目标文件、输入文件、输出文件、链接选项和存储器配置要求等。,第4章 DSP的软件开发与设计,4.3 COFF的一般概念,汇编器和链接器生成的目标文件,是一个可以由C54x器件执行的文件。这些目标文件的格式称之为公共目标文件格式(COFF)。,在编写
19、汇编语言程序时,COFF采用代码段和数据段的形式,以便于模块化的编程,使编程和管理变得更加方便。这些代码段和数据段简称为段。汇编器和链接器提供一些伪指令来建立和管理各种各样的段。,第4章 DSP的软件开发与设计,COFF文件的基本单元,1.段(sections),是COFF文件中最重要的概念。每个目标文件都分成若干段。,段是存储器中占据相邻空间的代码或数据块。一个目标文件中的每个段都是分开的和各不相同的。,COFF目标文件都包含以下3种形式的段:.text 段(文本段),通常包含可执行代码;.data 段(数据段),通常包含初始化数据;.bss 段(保留空间段),通常为未初始化变量保留存储空间
20、。,第4章 DSP的软件开发与设计,COFF文件的基本单元,2.段的基本类型,COFF目标文件中的段有两种基本类型。,初始化段 未初始化段,(1)初始化段,初始化段中包含有数据或程序代码。主要有:.text段已初始化段;.data段已初始化段;.sect段已初始化段,由汇编器伪指令建立 的自定义段。,第4章 DSP的软件开发与设计,2.段的基本类型,COFF目标文件中的段有两种基本类型。,(2)未初始化段,在存储空间中,为未初始化数据保留存储空间。它包括:.bss段未初始化段;.usect段未初始化段,由汇编命令建立的命 名段(自定义段)。,第4章 DSP的软件开发与设计,COFF文件的基本单
21、元,3.段与目标存储器的对应关系,汇编器的任务:在汇编过程中,根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。链接器的任务:就是分配存储单元,将目标文件中的段重新定位到目标系统的存储器中,这一过程称为定位或分配。,第4章 DSP的软件开发与设计,3.段与目标存储器的对应关系,目标文件中的段与目标存储器之间的关系,.bss,.data,.text,RAM,E2PROM,ROM,第4章 DSP的软件开发与设计,汇编器对段的处理,汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。汇编器有5条伪指令可识别汇编语言程序的各个部分:,.bss.usect.te
22、xt.data.sect,定义未初始化段定义未初始化段定义已初始化段定义已初始化段定义已初始化段,第4章 DSP的软件开发与设计,汇编器对段的处理,未初始化段就是在C54x存储器中保留空间,通常它们被定位在RAM区。在目标文件中,这些段中没有确切的内容。由这些段定义的空间仅作为临时存储空间,在程序运行时,可以利用这些存储空间存放变量。未初始化段分为默认的和命名的两种,分别由汇编器伪指令.bss和.usect产生。,1.未初始化段,第4章 DSP的软件开发与设计,(1).bss伪指令,1.未初始化段,用于在bss段中保留若干个空间。格式:.bss 符号,字数,符号对应于保留的存储空间第一个字的变
23、量名称。可以让其他段引用,也可以用.global命令定义为全 局符号。,字数表示在bss段或标有名字的段中保留若干个存储单元。,每调用一次.bss伪指令,汇编器在相应的段保留更多的空间。,第4章 DSP的软件开发与设计,1.未初始化段,(2).usect伪指令,用于为指定的命名段保留若干个空间。格式:符号.usect“段名”,字数,段名程序员为未初始化的命名段定义的名字。,每调用一次.usect伪指令,汇编器在指定的命名段保留更多的空间。,第4章 DSP的软件开发与设计,汇编器对段的处理,已初始化段中包含有可执行代码或初始化数据。这些段中的内容都在目标文件中,当加载程序时再放到C54x的存储器
24、中。每个已初始化段都是可以重新定位的,并且可以引用其他段中所定义的符号。链接器在链接时会自动地处理段间的相互引用。已初始化段由.text、.data和.sect三个伪指令建立。,2.已初始化段,第4章 DSP的软件开发与设计,已初始化命令的句法:,2.已初始化段,.text 段起点.data 段起点.sect“段名”,段起点,段起点是任选项。若选用,它为段程序计数器SPC定义一个起始值。若默认,则SPC从0开始。,第4章 DSP的软件开发与设计,汇编器对段的处理,当汇编器遇到.text或.data或.sect命令时,将停止对当前段的汇编(相当于一条结束当前段汇编的命令),然后将紧接着的程序代码
25、或数据汇编到指定的段中,直到再遇到另一条.text、.data或.sect命令为止。当汇编器遇到.bss或.usect命令时,并不结束当前段的汇编,只是暂时从当前段脱离出来,并开始对新的段进行汇编。.bss和.usect命令可以出现在一个已初始化段的任何位置,而不会对它的内容发生影响。,第4章 DSP的软件开发与设计,汇编器对段的处理,命名段由用户指定,与默认的.text,.data和.bss段的使用相同,但它们被分开汇编。假如一部分可执行代码(例如初始化程序)不希望和.text段分配在一起,可将它们汇编进一个命名段,这样就可定位在与.text不同的地方。也可将初始化的数据汇编到与.data段
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TMS320C54x 软件 开发 设计
链接地址:https://www.31ppt.com/p-6522019.html