dsp软件系统结构与设计

上传人:第*** 文档编号:59851375 上传时间:2018-11-12 格式:PPT 页数:71 大小:1.44MB
返回 下载 相关 举报
dsp软件系统结构与设计_第1页
第1页 / 共71页
dsp软件系统结构与设计_第2页
第2页 / 共71页
dsp软件系统结构与设计_第3页
第3页 / 共71页
dsp软件系统结构与设计_第4页
第4页 / 共71页
dsp软件系统结构与设计_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《dsp软件系统结构与设计》由会员分享,可在线阅读,更多相关《dsp软件系统结构与设计(71页珍藏版)》请在金锄头文库上搜索。

1、DSP器件及应用,厦门理工学院电子系 陈金西,第三章 DSP的软件系统结构与设计,主要内容: 概述 公共目标文件格式(COFF) DSP C语言程序设计 DSP C项目编写实例及仿真调试,3.1 概述,C54x软件设计有3种方法: 用C语言开发 全汇编语言开发 C和汇编语言混合编程开发(主流) 采用C和汇编语言混合编程必须遵循一些有关的规则。,汇编软件开发过程 C语言软件开发过程,3.2 公共目标文件格式(COFF),通过汇编器和链接器建立的可执行目标文件的格式称为公共目标文件格式,即COFF(common object file format)。 COFF文件有3种形式:COFF0、COFF

2、1、COFF2。C54x汇编器和编译器默认建立的是COFF2文件。,3.2.1 COFF文件中的段,段(sections)是COFF文件中最重要的概念。 段就是在存储器中占据相邻空间的代码或数据块。 每个目标文件都分成若干个段。且每一个段都是分开和各不相同的。所有的COFF文件都包含以下3种形式的段:,.text 段该段通常包含可执行代码 .data 段该段通常包含初始化数据 .bss 段该段通常为未初始化变量保 留存储空间 用户自己定义的段自定义段。,3.2.2 段的类型,已初始化段:包含的是数据或代码,.text和.data段都是已初始化段,用户通过.sect建立已初始化的自定义段。 未初

3、始化段:它为未初始化数据保留空间,.bss段是未初始化段,用户通过.usect建立未初始化的自定义段。 一般,把已初始化段存放到程序存储空间,把未初始化段存放在数据空间。,3.2.3 目标文件中的段与目标存储器之间的关系,汇编器:把指令译成代码,并根据汇编伪指令用适当的段将各部分程序代码和数据连在一起,构成目标文件。 链接器:分配存储单元,将各个段分配定 位到相应的目标存储器中。 各个段到底在存储器中的什么位置,对我们很重要,要弄清楚。,自定义段也可以通过定义分配到数据空间或是程序空间。,汇编器对段的处理,汇编器通过5条伪指令来识别汇编语言程序的段,这5条命令是: .bss 未初始化段,为变量

4、保留空间 .usect 未初始化段,建立用户的自定义段 .text 已初始化段,用户程序代码 .data 已初始化段,为某段存储空间初始化数据 .sect 已初始化段,建立用户的自定义段,伪指令语法:,.bss 符号,字数; 定义变量或数组名称 符号 .usect “段名”,字数; 符号:对应于保留空间的第一个字的变量名称。 字数:表示保留多少个存储单元。,例:.bss x,2 ;为x数组变量保留2个字的空间 var1 .usect “.newvars”,10 ;为.newvars段保留10个字的空间,var1为该空间第一个字,例:,.text 段起点 .data 段起点 .sect “段名”

5、, 段起点 段起点是可选项,它是用段程序计数器SPC定义的一个起始值,也可以缺省,缺省值为0,一般都是省略。,例:.data .word 1,2,3 .byte 1,2,3,4 .sect “.con” ;定义段.con .word 1,2,3,4;对段赋值(初始化),例:,段起点:,.data .word 011h,022h,033h .bss var1,1 .data ptr .word 0123h .text add: LD #4,DP ;EA04H LD #1234H,A ;F020H,1234H ADD 9H,A ;0089H .data vals .word 0aah,0bbh v

6、ar2 .usect “.newvars”,1 buff .usect “.newvars”,7 .text LD A,B ;F540H,例:,汇编结果 (形成的段):,.data .word 011h,022h,033h .bss var1,1 .data ptr .word 0123h .text add: LD #4,DP ;EA04H LD #1234H,A ;F020H,1234H ADD 9H,A ;0089H .data vals .word 0aah,0bbh var2 .usect “.newvars”,1 buff .usect “.newvars”,7 .text LD

7、A,B ;F540H,请具体写出汇编器对下面一段程序进行汇编后建立的段。,练习:,.text 100FH F010H 0001H F842H 0001H 110AH F166H 000AH F868H 0006H,.data 0011h 0022h 0033h 0123h 00aah 00bbh 00cch,.bss 保留10个字空间,.newvars 保留8个字空间,.vectors 0011h 0033h,汇编后建立的段:,附录1. 常用的汇编伪指令,附录2条件汇编伪指令,.if、.elseif、.else、.endif伪指令告诉汇编器按照表达式的计算结果对代码块进行条件汇编。 .if e

8、xpression 标志条件块的开始,仅当条件为真(expression的值非0即为真)时汇编代码。 .elseif expression 标志若.if条件为假,而.elseif条件为真时要汇编代码块。 .else 标志若.if条件为假时要汇编代码块。 .endif 标志条件块的结束,并终止该条件代码块。,附录3引用其他文件和初始化常数伪指令,.include 文件名 将指定文件复制到当前位置,其内容可以是程序、数据、符号定义等。 .copy 文件名 与.include类似。 .def 符号名 在当前文件中定义一个符号,可以被其他文件使用。 .ref 符号名 在其他文件中定义,可以在本文件中使

9、用的符号。 .global 符号名 其作用相当于.def、.ref效果之和。,.mmregs 定义存储器映射寄存器的符号名,这样就可以用AR0、PMST等助记符替换实际的存储器地址。 .float 数1,数2 指定的各浮点数连续放置到存储器中(从当前段指针开始)。 .word 数1,数2 指定的各数(十六进制)连续放置到存储器中。 .space n 以位为单位,空出n位存储空间。 .end 程序块结束。,附录4宏定义和宏调用,TMS320C54x汇编支持宏语言。如果程序中需要多次执行某段程序,可以把这段程序定义(宏定义)为一个宏,然后在需要重复执行这段程序的地方调用这条宏。 宏定义如下: Ma

10、cname .macroparameter 1,parameter n .mexit .endm,宏调用的格式:,label: macname parameter1,parametern,1 * 2 3 * add3 4 * 5 * ADDRP=P1+P2+P3 ;说明宏功能 6 7 add3 .macro p1,p2,p3,ADDRP ;定义宏 8 9 LD p1,A ;将参数1赋给A 10 ADD p2,A ;将参数2与A相加 11 ADD p3,A ;将参数3与A相加 12 STL A,ADDRP ;将结果A的低字存参数4 13 .endm ;结束宏 14 15 16 .global a

11、bc,def,ghi,adr ;定义全局符号 17 18 000000 add3 abc,def,ghi,adr ;调用宏 1 1 000000 1000! LD abc,A ;宏展开 1 000001 0000! ADD def,A 1 000002 0000! ADD ghi,A 1 000003 8000! STL A,adr,附录. 例 宏定义、宏调用和宏展开,链接器对段的处理,链接器处理段,主要是完成2个任务: 把一个或多个COFF目标文件(.obj)中的各个段作为链接器的输入段,经链接以后在一个可执行的COFF输出模块中建立各个输出段。 为各个输出段选定存储器地址。,链接器的任务通

12、过链接命令文件(.cmd)完成,链 接命令文件则主要是通过2条伪命令实现: MEMORY 此命令用来定义目标系统实际存在的存储器配置图,包括对存储器各部分命名,以及规定它们的起始地址和长度 SECTIONS 此命令告诉链接器如何将输入段组合成输出段,以及将输出段放在存储器的什么位置,两个文件file1.asm和 file2.asm经汇编后形 成两个目标文件file1.obj 和file2.obj,形成的各个 段如右图所示:,例:,对file1.obj、file2.obj链 接后结果如右图所示:,对file1.obj、file2.obj默认链接:链接器默认的存储器分配如图所示:,3.3 C语言程

13、序设计,3.3.1 vectors.asm源文件的编写 3.3.2 C语言主体源程序的编写 3.3.3 5402.h头文件的编写 3.3.4 5402.cmd命令文件的编写 3.3.5 C项目的编程与调试实例,若用户要建立一个C语言软件项目,该项目必须包括以下文件(以建一个项目example为例):,vectors.asm ;定义复位、中断矢量源文件。 example.c ;主体源程序。 c5402.h ;定义C5402内部控制及状态寄存器。 c5402.cmd ;定义存储空间,并为段分配空间。 rts.lib ;运行库文件,由TI提供。,3.3.1 vectors.asm源文件的编写,C的主

14、程序是main,DSP复位时跳转到地址为FF80H的位置,如何从FF80H跳转到main执行? rts.lib运行时间支持库函数解决了该问题:它提供了名称为_c_int00的引导程序,通过执行该程序能进入到main主程序。 那如何从FF80H到_c_int00,我们只需在FF80H的位置放置一条汇编跳转指令: B _c_int00,即启动过程:DSP复位(地址:FF80H,存放指令:B _c_int00;)rts.lib的引导程序_c_int00main。,同理,中断也是如此。 因此我们把中断矢量的设置形成一个文件vectors.asm,如: .ref _c_int00, _NMI_INT,

15、_SOFT_INT .sect “.vectors“ RS B _c_int00 NOP NOP NMI B _NMI_INT NOP NOP SINT2 B _SOFT_INT NOP NOP SINT3 B _SOFT_INT NOP NOP ,3.3.2 C主体源程序的编写,C语言中常用的关键字 C与汇编混和编程 及注意事项,#include “c5402res.h“ #include “init_5402.c“ ioport unsigned port3002; ioport unsigned port3003; ioport unsigned port8005; ioport unsigned port8007; extern void init_5402( ); void main() unsigned int a; init_5402(); while(1) a=port3003; port3002=a; port8005=a;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号