【学习】第4章TMS320C54x的软件开发与设计_第1页
【学习】第4章TMS320C54x的软件开发与设计_第2页
【学习】第4章TMS320C54x的软件开发与设计_第3页
【学习】第4章TMS320C54x的软件开发与设计_第4页
【学习】第4章TMS320C54x的软件开发与设计_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、整理课件4.4.1 1 TMS320C54x软件开发过程软件开发过程 汇编语言程序的编辑、汇编和链接过程汇编语言程序的编辑、汇编和链接过程 COFF的一般概念的一般概念 整理课件整理课件TMS320的开发工具是一个软件包,其中包括的开发工具是一个软件包,其中包括:vC优化编译器优化编译器v汇编器汇编器v连接器连接器v归档器归档器v交叉引用列表器交叉引用列表器v十六进制转换公用程序十六进制转换公用程序整理课件C优化编译器(优化编译器(C Compile) TI 为其为其TMS320系列系列 DSP提供了一系列的提供了一系列的 C 编译器。将标准编译器。将标准 C 源文件编译成为相应片源文件编译成

2、为相应片种的汇编语言源代码文件。种的汇编语言源代码文件。完全符合完全符合ANSI C标准标准带有一个完整的运行支持库带有一个完整的运行支持库使用多种先进技术来优化使用多种先进技术来优化 C 源代码,以产源代码,以产生高效汇编代码。生高效汇编代码。整理课件汇编器(汇编器(Assembler) 将汇编语言的源程序文件汇编成为机器将汇编语言的源程序文件汇编成为机器语言的目标程序文件,其格式为语言的目标程序文件,其格式为COFF(公(公用目标文件格式)。汇编语言源程序可以用目标文件格式)。汇编语言源程序可以包括汇编语言指令(包括汇编语言指令(instruction)、汇编)、汇编伪指令(伪指令(ass

3、embler directives)和宏指)和宏指令(令(macro directives)整理课件连接器(连接器(Linker) 连接器的基本任务是将目标文件连接在连接器的基本任务是将目标文件连接在一起,产生可执行模块。连接器可以接受一起,产生可执行模块。连接器可以接受的输入文件包括汇编器产生的的输入文件包括汇编器产生的COFF目标文目标文件、命令文件、库文件、以及已部分连接件、命令文件、库文件、以及已部分连接好了的文件。它所产生的可执行好了的文件。它所产生的可执行COFF目标目标模 块 可 以 装 入 各 种 开 发 工 具模 块 可 以 装 入 各 种 开 发 工 具 , 或 由或 由T

4、MS320器件来执行器件来执行整理课件归档器(归档器(Archiver) 归档器允许用户将一组文件归入一个档归档器允许用户将一组文件归入一个档案文件(库)。例如,将若干个宏归入一案文件(库)。例如,将若干个宏归入一个宏库,汇编器将搜索这个库,并调用源个宏库,汇编器将搜索这个库,并调用源文件中使用的宏。也可以用归档器将一组文件中使用的宏。也可以用归档器将一组目标文件收入一个目标文件库,连接器将目标文件收入一个目标文件库,连接器将连接库内的成员,并解决外部引用连接库内的成员,并解决外部引用整理课件交叉引用列表器(交叉引用列表器(Cross-Reference Lister) 交叉引用列表器是一个查

5、错的工具。它交叉引用列表器是一个查错的工具。它接受已经连接好的目标文件作为输入,产接受已经连接好的目标文件作为输入,产生一个交叉引用列表作为输出。它列出符生一个交叉引用列表作为输出。它列出符号、符号的定义、以及它们在已经连接的号、符号的定义、以及它们在已经连接的源文件中的引用源文件中的引用整理课件十六进制转换公用程序(十六进制转换公用程序(Hex Conversion Utility)将将COFF目标文件转换成为若干种标准的文件格式:目标文件转换成为若干种标准的文件格式:vASCII-十六进制十六进制vExtended TektronixvIntel MCS-86vMotorola Exorc

6、iser整理课件整理课件 全汇编编程:全汇编编程:代码效率高,可直接对硬件设置;代码量较大,可读性差。代码效率高,可直接对硬件设置;代码量较大,可读性差。 全全C编程:编程:提高软件开发速度和可读性,方便软件移植;代码效率较低,硬件提高软件开发速度和可读性,方便软件移植;代码效率较低,硬件控制不方便。控制不方便。 混合编程混合编程 混合编程几种方法:混合编程几种方法:(1)独立编写)独立编写C/C+程序和汇编程序,分开编译或汇编形成各自程序和汇编程序,分开编译或汇编形成各自的目标模块,再用链接器将的目标模块,再用链接器将C/C+模块和汇编模块链接起来。模块和汇编模块链接起来。(2)在)在C/C

7、+程序中直接内嵌汇编语句。程序中直接内嵌汇编语句。(3)将)将C程序编译生成相应的汇编程序,手工修改和优化程序编译生成相应的汇编程序,手工修改和优化C编译器编译器生成的汇编代码。生成的汇编代码。整理课件 混合编程说明:混合编程说明: 变量和函数命名规则变量和函数命名规则 无论是变量还是函数,在无论是变量还是函数,在C C语言和汇编中均需要说明为全局的。语言和汇编中均需要说明为全局的。在在C C语言中需要有准确的函数原型说明。语言中需要有准确的函数原型说明。 在在C C语言中保持语言中保持“自然自然”的命名,而在汇编语言中该名字需加一的命名,而在汇编语言中该名字需加一个下划线作为前缀。个下划线作

8、为前缀。 例:例:C语言部分:语言部分:extern int product(int *x, int *y);extern int i;汇编部分:汇编部分:.global _i.global _product整理课件 混合编程说明:混合编程说明: 变量访问规则变量访问规则 C C程序访问由程序访问由.bss.bss定义的汇编变量:定义的汇编变量: (1 1)汇编程序中,该变量名前要加下划线)汇编程序中,该变量名前要加下划线“_”_”;(2 2)汇编程序中,用)汇编程序中,用.global.global命令将其定义为全局变量;命令将其定义为全局变量;(3 3)在)在C C程序中,将变量说明为外部

9、变量程序中,将变量说明为外部变量C语言部分:语言部分:extern int var;var=1;汇编部分:汇编部分:.bss _var, 1.global _var整理课件 混合编程说明:混合编程说明: 变量访问规则变量访问规则 C C程序访问不在程序访问不在.bss.bss中定义的汇编常量表:中定义的汇编常量表: (1 1)汇编程序中,汇编程序中,在该常量表前加一标号(标号前要加在该常量表前加一标号(标号前要加“_”_”););(2 2)汇编程序中,汇编程序中,将该标号定义为全局标号;将该标号定义为全局标号;(3 3)在)在C C程序中,以程序中,以externextern的形式对该标号声明

10、,并利用指针访的形式对该标号声明,并利用指针访 问该常量表。问该常量表。C语言部分:语言部分:extern int var;int *p=var;f=p1汇编部分:汇编部分:.global _var_var: .word 10 .word 20整理课件 混合编程说明:混合编程说明: 变量访问规则变量访问规则 C C程序访问用程序访问用.set.set定义的汇编时间常数:定义的汇编时间常数: (1 1)汇编程序中,汇编程序中,在该常数名前在该常数名前 “_”_”;(2 2)汇编程序中,汇编程序中,将该常数名定义为全局符号;将该常数名定义为全局符号;(3 3)在)在C C程序中,以程序中,以ext

11、ernextern的形式对该符号声明,并用取地址运的形式对该符号声明,并用取地址运 算符算符“&”&”取该常量参与运算取该常量参与运算C语言部分:语言部分:extern int shift;#define ad (int)(&shift);x=ad;汇编部分:汇编部分:_shift .set 3.global _shift整理课件 混合编程说明:混合编程说明: 变量访问规则变量访问规则 汇编程序访问用汇编程序访问用C C程序中的变量或数组:程序中的变量或数组: (1 1)在)在汇编程序汇编程序和和C C程序中,都将该变量或数组定义成外部属性。程序中,都将该变量或数组定义成外部属性。(2 2)在

12、汇编中定义该变量或数组时需在前加)在汇编中定义该变量或数组时需在前加“_”_”;C语言部分:语言部分:int speech_in160, speech_out160;main()汇编部分:汇编部分:.global _speech_in.global _speech_outld #_speech_in, b stlm b, ar2ld #_speech_out, astlm a, ar3ld #159, astlm a, brcnopnoprptb nextmvdd *ar2+, *ar3+next: 整理课件 混合编程说明:混合编程说明: 程序调用规则程序调用规则 寄存器使用说明:寄存器使用说

13、明: (1)辅助寄存器)辅助寄存器AR1、AR6、AR7由被调用函数保护,即可以在函数执行过程由被调用函数保护,即可以在函数执行过程中修改,但在函数返回时必须恢复。中修改,但在函数返回时必须恢复。AR0、AR2、AR3、AR4、AR5可以自由可以自由使用,即在函数执行过程中可以修改,而且不必恢复。使用,即在函数执行过程中可以修改,而且不必恢复。(2)堆栈指针)堆栈指针SP在函数调用时必须予以保护,但其是自动保护的,即在返回在函数调用时必须予以保护,但其是自动保护的,即在返回时,压入椎栈的内容都将被全部弹出。时,压入椎栈的内容都将被全部弹出。(3)ARP在函数进入和返回时,必须为在函数进入和返回

14、时,必须为0,即当前辅助寄存器为,即当前辅助寄存器为AR0。函数执。函数执行时可以是其它值。行时可以是其它值。(4)在缺省的情况下,编译器总是认为)在缺省的情况下,编译器总是认为OVM为为0。因此,若在汇编程序中将。因此,若在汇编程序中将OVM置为置为1,则在返回,则在返回C环境时,必须将其恢复为环境时,必须将其恢复为0。(5)其它状态位和寄存器在子程序中可以任意使用,不必恢复。)其它状态位和寄存器在子程序中可以任意使用,不必恢复。整理课件 混合编程说明:混合编程说明: 程序调用规则程序调用规则 参数传递说明:参数传递说明: (1)函数调用前,将参数以逆序压入运行堆栈,即最右边的参数)函数调用

15、前,将参数以逆序压入运行堆栈,即最右边的参数最先入栈,然后自右向左将参数依次入栈,最后是返回地址入栈。最先入栈,然后自右向左将参数依次入栈,最后是返回地址入栈。第一个参数(最左边)放入累加器第一个参数(最左边)放入累加器A中进行传递。中进行传递。(2)函数调用结束后,将返回值置于累加器)函数调用结束后,将返回值置于累加器A中。中。编程实例编程实例以以32位乘法运算为例。虽然用位乘法运算为例。虽然用C/C+语言表达乘法运算较为方便和明了,语言表达乘法运算较为方便和明了,但由于但由于C/C+语言无法很好利用语言无法很好利用DSP汇编语言为实现各种乘法运算而提汇编语言为实现各种乘法运算而提供的指令,

16、使得供的指令,使得C/C+程序效率低下。所以这里用汇编语言完成乘法运程序效率低下。所以这里用汇编语言完成乘法运算,再用算,再用C/C+程序调用它。程序调用它。整理课件编程实例(续)编程实例(续)C语言主程序语言主程序#include #include int main() extern int *MPY32 (long X, long Y); /定义函数原型,返回指针值定义函数原型,返回指针值 int W4; /定义存放相乘结果的数组定义存放相乘结果的数组 int *P; int i; P=MPY32(0 x11112222, 0 x33334444); /函数调用函数调用/该指针指向数据存储

17、器中,存放相乘结果单元的首地址该指针指向数据存储器中,存放相乘结果单元的首地址for(i=0; i16,低,低16位相乘的进位位相乘的进位MACSU *AR2-, *AR3+,A /A+=y1*x0MACSU *AR3-, *AR2, A /A+=x1*y0w0w1w2w3y0y1x0 x1AR2AR3AR4整理课件编程实例(续)汇编程序编程实例(续)汇编程序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单元地址作为

18、返回值,传递到单元地址作为返回值,传递到ARET整理课件 混合编程说明:混合编程说明: 汇编语句嵌入规则汇编语句嵌入规则 在在C程序中直接内嵌汇编语句。此种方法可以在程序中直接内嵌汇编语句。此种方法可以在C程序中实现程序中实现C语言无法实现的一些硬件控制功能,语言无法实现的一些硬件控制功能, 如修改寄存器值,或在编译如修改寄存器值,或在编译结果中添加注释等。嵌入汇编语句的方法比较简单,只需在汇编语结果中添加注释等。嵌入汇编语句的方法比较简单,只需在汇编语句的两边加上括号和双引号,并且在括号前加上句的两边加上括号和双引号,并且在括号前加上asm标识符即可,标识符即可,即即asm(“ 汇编语句汇编

19、语句”)。但需注意以下几点:。但需注意以下几点:(1)括号中的汇编语句必须以标号、空格、)括号中的汇编语句必须以标号、空格、tab 、分号开头,这和通、分号开头,这和通常的汇编编程的语法一样。常的汇编编程的语法一样。(2)不要在嵌入的汇编语句中使用修饰性汇编代码)不要在嵌入的汇编语句中使用修饰性汇编代码.text、.data等。等。(3)插入跳转语句和标号会产生不可预测的结果。)插入跳转语句和标号会产生不可预测的结果。(4)汇编语句不要改变)汇编语句不要改变C程序中变量的值。程序中变量的值。asm(“ssbx xf”)asm(“*this is an assembly language com

20、ment”)练习:练习:用用C实现循环延时,用嵌入式汇编语句对实现循环延时,用嵌入式汇编语句对XF引脚置高低电平,实现方波发生器。引脚置高低电平,实现方波发生器。整理课件.asm源文件源文件.obj目标文件目标文件.out输出文件输出文件. cmd链接命链接命令文件令文件. lst列表文件列表文件. map存储器存储器映像文件映像文件- - o- - m- - l整理课件整理课件常用的汇编命令:常用的汇编命令: asm500 %1 s l x 整理课件常用的汇编器命令:常用的汇编器命令: lnk500 %1.cmd lnk500:lnk500: %1.cmd:%1.cmd: 链接命令文件名,该

21、文件须链接命令文件名,该文件须指明指明目标文件、目标文件、输入文件、输出文件、输入文件、输出文件、链接选项和存储器配置要求等。链接选项和存储器配置要求等。 整理课件整理课件整理课件整理课件整理课件整理课件目标文件目标文件目标存储器目标存储器.bss.data.textRAME2PROMROM整理课件整理课件整理课件整理课件整理课件整理课件整理课件整理课件整理课件整理课件整理课件整理课件整理课件共计共计5 5个字个字整理课件共计共计5 5个字个字整理课件源程序源程序的行号的行号 段程序段程序计数器计数器目标目标代码代码汇编语言汇编语言源程序源程序整理课件源程序源程序的行号的行号 段程序段程序计数

22、器计数器目标目标代码代码汇编语言汇编语言源程序源程序整理课件源程序源程序的行号的行号 段程序段程序计数器计数器目标目标代码代码汇编语言汇编语言源程序源程序整理课件整理课件 15 0 15 00,1 0 0 A A 0 0 B B2 0 C C C 3,4 E E E E F F F F 5 D D D D he6,7 0 0 6 8 0 0 6 5lp8,9 0 0 6 C 0 0 7 0整理课件整理课件整理课件1 0 11 0 10 0 1 0 0 10 0 1 0 0 11 0 0 0 01 0 0 0 00 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 00123h0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 10 0 0 0 0 0 0 1 0 0 1 0 0 0 1 14h0 1 0 00 1 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论