DSP教案4(编程基础)讲课用.ppt_第1页
DSP教案4(编程基础)讲课用.ppt_第2页
DSP教案4(编程基础)讲课用.ppt_第3页
DSP教案4(编程基础)讲课用.ppt_第4页
DSP教案4(编程基础)讲课用.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第四章 DSP编程基础,主要内容,TMS320C54x软件开发过程 汇编语言程序的编写 COFF的一般概念 汇编语言程序的编辑、汇编和链接 汇编语言程序设计举例,一、软件开发流程图,二、汇编语言程序的编写,在文本编辑器(Editor)中编写满足C54x汇编器(Assembler)格式要求的汇编源程序。 用汇编器汇编该源文件,如果源文件中调用了宏,汇编器还会到宏库中搜索该宏。 汇编之后生成格式为公共目标文件格式(COFF,Common Object File Format)的目标文件(.obj),称为COFF目标文件。 用链接器(Linker)链接目标文件,如果包含可运行支持库和目标文件库,链接器还会到所保护的库中搜索所需要的成员。,汇编语言程序的编写(续),链接之后生成可执行的COFF执行文件(.out)。 COFF执行文件下载到C54xDSP中执行,同时也可借助调试工具(Debugging Tool)对程序进行跟踪调试或优化,也可利用交叉参考列表器(Cross-reference Lister)和绝对列表器(Absolute Lister)生成一些包含调试信息的表。,1、汇编语言源程序句法,汇编语言源程序的每一行都可以由四部分组成,句法如下: 标号: 助记符 操作数 ;注释,2、例子:,* * lab1.asm y= a1*x1+a2*x2+a3*x3+a4*x4 * * .title “lab1.asm“ .mmregs STACK .usect “STACK“,10h ;分配堆栈空间 .bss a,4 ;给变量分配空间 .bss x,4 .bss y,1 .def start .data table: .word 1,2,3,4 ;数据流 .word 8,6,4,2,.text ;以下为程序码流 start: STM #0,SWWSR ;adds no wait states STM #STACK+10h,SP ;设置堆栈指针 STM #a,AR1 ;AR1 指向a RPT #7 ;重复8次 MVPD table,*AR1+ ;从程序存储器到数据 CALL SUM ;调用SUM 子程序 end: B end SUM: STM #a,AR3 ;子程序进行重复加法 STM #x,AR4 ; RPTZ A,#3 MAC *AR3+,*AR4+,A STL A,y RET .end,3、句法解释,标号: 供本程序的其他部分或其他程序调用。标号是任选项,标号后面可以加也可以不加冒号 “:” 。标号必须从第一列写起,但第一个字母不能以数字开头。引用标号时,标号的大小写必须一致。 助记符:助记符指令、汇编指令、宏指令和宏调用。作为助记符指令,一般用大写;汇编命令和宏命令,以句号“.”开始,且为小写。 操作数:指令中的操作数或汇编命令中定义的内容。操作数之间必须用逗号“,”分开。 注释:注释从“;”开始,可以放在单独的一行或数行。注释是任选项。 ( 如果注释是从第一列开始,也可以用“*”号。),4、常用的汇编命令伪指令,常用的汇编命令伪指令(续),常用的汇编命令伪指令(续),5、COFF 数据型式,三、COFF的一般概念,TMS320C54x的汇编器和链接器都会生成公共目标文件格式(COFF,Common Object File Format)的目标文件。在本章中,将汇编器生成的文件称为COFF的目标文件,将链接器生成的文件称为COFF执行文件。目前,COFF目标文件格式已被广泛使用,因为它支持模块化(段)编程,能够提供有效灵活的管理代码段和目标系统(Target System)存储空间的方法。,1、COFF文件中的段,段(section),就是在存储器图中占据相邻空间的代码或数据块。每个目标文件都分成若干个段,一个目标文件中的每一个段都是分开的和各不相同的。COFF目标文件都包含以下三种形式的段: .text 段(此段通常包含可执行代码) .data段(此段通常包含初始化数据) .bss 段(此段通常为未初始化变量保留存储空间),已初始化段:已初始化段中包含有数据或程序代码。.text段和.data段都是已初始化段。用.sect命令建立的段也是已初始化段。 未初始化段:(.bss和.usect)仅仅是用于在存储空间中保留空间,并没有代码或数据,所以未初始化段只有段头,而没有原始数据、重定位信息和行号等。另外,如果程序中没有使用缺省的段(.text,.data和.bss),那么它们在COFF文件中也没有原始数据、重定位信息和行号等,因为它们的原始数据长度为零。 汇编器在汇编过程中,根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。,2、段的分类,3、段的顺序,汇编器在将汇编源程序汇编成COFF目标文件时,将按“.text、.data、用户自定义初始化段、.bss、用户自定义的未初始化段”的顺序将各段放入生成的COFF文件中。 因为未初始化段(.bss和.usect)仅仅是用于在存储空间中保留空间,并没有代码或数据,所以未初始化段只有段头,而没有原始数据、重定位信息和行号等。另外,如果程序中没有使用缺省的段(.text,.data和.bss),那么它们在COFF文件中也没有原始数据、重定位信息和行号等,因为它们的原始数据长度为零。 如果源程序不止一个,汇编器在汇编时,会将每个程序的段按如下方式放置: .text1,.text2,.text3,.data1,.data2,.data3,.bss1,.bss2,.bss3等。,C54X汇编工具的使用,C54X的源程序可以使用汇编或C语言编写。使用汇编语言是可以使用助记符指令集(Mnemonic Instruction Set)或代数指令集(Algebraic Instruction Set),但两种不能混用。,汇编语言的编辑、汇编和链接,目标文件中段与存储器之间的关系,上例中的目标代码图,输入段组合成可执行的目标文件,默认的存储器分配过程:,.text,.text1,.text2,.data,.data1,.data2,.bss,.bss1,.bss2,table,table_1,table_2,u_vars1,u_vars1,u_vars2,FFT,FFT,没有使用,没有配置,没有配置,没有使用,输入段组合成可执行的目标文件,文件之间的链接,两种指令的汇编语言比较,low_pass_mac: push(st1) ; pshm st1 push(st0) ; pshm st0 push(ar0) ; pshm ar0 push(bk) ; pshm bk ar2 = data(#t_ar2) ; mvdm #t_ar2,ar2 ar3= data(#t_ar3) ; mvdm #t_ar3,ar3 ar0 = #1 ; stm #1,ar0 bk = #N ; stm #N,bk *ar3+% = a ; stl a,*ar3+% repeat(#(N-1),a=0 ; rptz a,#(N-1) a+= *ar2+0% * *ar3+0% ; mac *ar2+0%,*ar3+0%,a,ASM500命令格式如下: asm500 input file object file listing file -options input file: 汇编源文件名,缺省后缀为.asm object file: 编译输出的OBJ文件名,缺省后缀为.obj listing file: 产生的列表文件名,缺省后缀为.lst options: 编译器使用的各种选择。常用选项有: -c:若使用该选项,编译器忽略字母的大小写。例如abc与ABC是一样的。系统缺省为区分大小写。,-i:设置搜索路径。通知编译器在指定的搜索路径中去查找.copy,.include中的文件。用法举例:-ic:c54x。 -l: (小写的L)在编译时产生列表文件,缺省后缀为.lst -mg: 汇编源程序使用代数指令集 或在源代码中使用 . Algebraic -s:将所有的符号都放入符号表。若不使用该选项,编译器仅将全局变量放入符号表。 -v: 指定版本。特别是需要使用BOOTLOADER时,应加-v548开关。,先看两个汇编源程序:,file1.asm .global test loop: call test bc loop,ageq .end file2.asm file3.asm .global test .global test test : test: mar *ar3+ mar(*ar3+) add #1,a a=a+#1 ret return .end .end,汇编工具ASM500的使用举例,asm500 file1.asm asm500 file2 -l asm500 file3 -mg -l ,TMS320C54x COFF Assembler Version 1.20 Sun Jul 30 12:11:25 2000 Copyright (c) 1997 Texas Instruments Incorporated file2.asm PAGE 1 1 .global test 2 3 000000 test: 4 000000 6D93 mar *ar3+ 5 000001 F000 add #1,a 000002 0001 6 000003 FC00 ret 7 8 .end No Errors, No Warnings,TMS320C54x COFF Assembler Version 1.20 Sun Jul 30 12:21:26 2000 Copyright (c) 1997 Texas Instruments Incorporated file3.asm PAGE 1 1 .global test 2 3 000000 test: 4 000000 6D93 mar(*ar3+) 5 000001 F000 a=a+#1 000002 0001 6 000003 FC00 return 7 8 .end No Errors, No Warnings,C54X汇编语言书写规范,语法: label: 指令 操作数 ;注释 #前缀表示立即数或直接地址 后缀B或b表示二进制常数 例如: LD #1000B,A 后缀Q或q表示八进制常数 例如: LD #10Q,A 十进制常数 例如: LD #1000,A,C54X汇编语言书写规范,后缀H或h表示十六进制常数 例如: LD #1000H,A 使用.set定义一个符号的值 例如 addr .set 1000h stm #addr, ar0 标号的使用 例如 b loop loop: ssbx intm 使用 .global 定义全局标号,C54X汇编语言书写规范,使用符号$表示当前PC值 例如 B $ 可以使用结构 例如 item .struct .int value .int deltat _len .endstruct . array .tag item .bss array, i_len,C54X汇编语言书写规范,可以定义宏 例如 mypush .macro pshm ah pshm al pshm bh pshm bl endm,二.C54X连接工具的使用,使用LNK500命令可以将一个或多个OBJ文件连接为一个.OUT文件。在连接时,可以通过段定位控制命令将不同的代码、数据写入不同的内存单元。 注意:LNK500生成的OUT文件不是纯二进制代码文件,而是包含代码、符号表、代码定位信息的复合文件。,LNK500的使用格式: lnk500 -options filename 1 . . filename n 使用举例:lnk500 file1.obj file2.obj -o file.out LNK500命令常用的选项有: -e global_symbol: 定义程序的进入点。global_symbol必须在源程序中使用.global命令说明。 -c:使用C编译器的ROM初始化模式。,-cr: 使用C编译器的RAM初始化模式。 -i dir : 指定库文件的路径。 -l filename: 指定连接时使用的库文件名。 -m filename: 生成MAP文件。 -o filename: 指定生成的OUT文件名。系统缺省为a.out。 将文件file1.asm和file2.asm连接成OUT文件: lnk500 file1 file2 -m file.map -o file.out,通过查看MAP文件可以获得变量、子程序等符号的具体地址。注意:MAP文件只列出全局变量的地址。(用.global说明的符号),三.汇编链接工具对段的处理,为了灵活使用C54X的内存,可以将不同的代码段放入不同的内存中。在汇编源程序中可以使用下列指令: .bss 该指令表示在.bss段中保留空间。 用法: .bss symbol,size .usect 该指令表示在指定的段中保留空间。用法: symbol .usect “section name”,size,.text 将代码或数据放入.text段中 .data 将数据放入.data段中 .sect 将代码或数据放入指定的段中。 用法: symbol .sect “section name”,size 在链接时使用相应的控制命令以确定具体的内存地址。下面给出其中一种方法:其中,.bss, .text, .data 三个段是标准定义,而.vect, .buffer是自定义的。(t.cmd),MEMORY PAGE 0: PROG: origin = 1800h, length = 800h PAGE 4: PROG: origin = 0200h, length = 100h PAGE 1: DATA: origin = 0c00h, length = 100h PAGE 2: DATA: origin = 0d00h, length = 200h PAGE 3: DATA: origin = 0f00h, length = 100h SECTIONS .text PROG PAGE 0 .vect PROG PAGE 4 .bss DATA PAGE 1 .data DATA PAGE 2 .buffer DATA PAGE 3 ,链接命令文件.cmd,lab1.obj -o lab1.out -m lab1.map -e start MEMORY PAGE 0: EPROM: org = 0E000h, len =100h PAGE 1: SPRAM: org = 0060h, len =0020h DARAM: org = 0080h, len = 100h SECTIONS .text : EPROM PAGE 0 .vect : EPROM PAGE 0 .bss : SPRAM PAGE 1 STACK : DARAM PAGE 1 ,lab.map,TMS 320 C54x COFF Linker Version 1.10 Fri May 28 09: 48: 59 2002 OUTPUT FILE NAME: ENTRY POINT SYMBOL: start address:0000e000 MEMORY CONFIGURATION name origin length attributes fill PAGE 0: EPROM 0000e000 000000100 RWlX PAGE 1: SPRAM 00000060 00000O020 RWlX DARAM 00000080 000000100 RWlX,SECTION ALLOCATION MAP output attributes/ section page origin length input sections .text 0 0000e000 00000016 0000e000 00000016 lab.obj(.text) .data 1 0000e016 00000008 00000080 00000008 lab.ob

温馨提示

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

评论

0/150

提交评论