ImageVerifierCode 换一换
格式:PPT , 页数:72 ,大小:1.23MB ,
文档编号:4985084      下载积分:28 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-4985084.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(晟晟文业)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(DSP软件系统结构与设计课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

DSP软件系统结构与设计课件.ppt

1、DSP软件系统结构与设计第三章第三章 DSP的软件系统结构与设计的软件系统结构与设计主要内容:主要内容:l概述概述l公共目标文件格式(公共目标文件格式(COFF)lDSP C语言程序设计语言程序设计lDSP C项目编写实例及仿真调试项目编写实例及仿真调试3.1 概述概述C54x软件设计有软件设计有3种方法:种方法:n用用C语言开发语言开发n全汇编语言开发全汇编语言开发nC和汇编语言混合编程开发(主流)和汇编语言混合编程开发(主流)采用采用C和汇编语言混合编程必须遵循一些有关的规则。和汇编语言混合编程必须遵循一些有关的规则。汇编软件开发过程汇编软件开发过程 C语言软件开发过程语言软件开发过程3.

2、2 公共目标文件格式(公共目标文件格式(COFF)通过汇编器和链接器建立的可执行目标文件的格式称为公共目标文件格式,即通过汇编器和链接器建立的可执行目标文件的格式称为公共目标文件格式,即COFF(common object file format)。)。COFF文件有文件有3种形式:种形式:COFF0、COFF1、COFF2。C54x汇编器和编译器默认建立的是汇编器和编译器默认建立的是COFF2文件。文件。3.2.1 COFF文件中的段文件中的段段段(sections)是是COFF文件中最重要的概念。文件中最重要的概念。段段就是在存储器中占据相邻空间的代码或数据块。就是在存储器中占据相邻空间的

3、代码或数据块。每个目标文件都分成若干个段。且每一个段都是分开和各不相同的。所有的每个目标文件都分成若干个段。且每一个段都是分开和各不相同的。所有的COFF文件都包含以下文件都包含以下3种形式的段:种形式的段:.text 段段该段通常包含可执行代码该段通常包含可执行代码.data 段段该段通常包含初始化数据该段通常包含初始化数据.bss 段段该段通常为未初始化变量保该段通常为未初始化变量保 留存储空间留存储空间用户自己定义的段用户自己定义的段自定义段。自定义段。3.2.2 段的类型段的类型l已初始化段:包含的是数据或代码,已初始化段:包含的是数据或代码,.text和和.data段都是已初始化段,

4、用户通过段都是已初始化段,用户通过.sect建立已初始化的自定义建立已初始化的自定义段。段。l未初始化段:它为未初始化数据保留空间,未初始化段:它为未初始化数据保留空间,.bss段是未初始化段,用户通过段是未初始化段,用户通过.usect建立未初始化的自定义建立未初始化的自定义段。段。l一般,把已初始化段存放到程序存储空间,把未初始化段存放在数据空间。一般,把已初始化段存放到程序存储空间,把未初始化段存放在数据空间。3.2.3 目标文件中的段与目标存储器之间的关系目标文件中的段与目标存储器之间的关系n汇编器:把指令译成代码,并根据汇编伪指令用适当的段将各部分程序代码和数据连在一起,构成目标文汇

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

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

7、单元。例:例:.bss x,2 ;为为x数组变量保留数组变量保留2个字的空间个字的空间 var1.usect “.newvars”,10 ;为为.newvars段保留段保留10个字的空间,个字的空间,var1为该空间第一个字为该空间第一个字例:例:.text 段起点段起点.data段起点段起点.sect“段名段名”,段起点段起点段起点段起点是可选项,它是用段程序计数器是可选项,它是用段程序计数器SPC定义的一个起始值,也可以缺省,缺省值为定义的一个起始值,也可以缺省,缺省值为0,一般都是省略。,一般都是省略。例:例:.data .word 1,2,3 .byte 1,2,3,4 .sect“.

8、con”;定义段;定义段.con .word 1,2,3,4;对段赋值(初始化);对段赋值(初始化)例:例:段起点段起点:.data.word011h,022h,033h.bss var1,1.dataptr.word0123h.textadd:LD#4,DP;EA04HLD#1234H,A;F020H,1234HADD9H,A;0089H.datavals.word0aah,0bbhvar2.usect“.newvars”,1buff.usect“.newvars”,7.textLDA,B;F540H例:例:汇编结果汇编结果(形成的段):(形成的段):.data.word011h,022h,

9、033h.bss var1,1.dataptr.word0123h.textadd:LD#4,DP;EA04HLD#1234H,A;F020H,1234HADD9H,A;0089H.datavals.word0aah,0bbhvar2.usect“.newvars”,1buff.usect“.newvars”,7.textLDA,B;F540H请具体写出汇编器对下面一段程序进行汇编后建立的段。请具体写出汇编器对下面一段程序进行汇编后建立的段。源程序的行号源代码(机器码)源程序123456789101112131415161718100FHF010H,0001HF842H,0001H110AHF

10、166H,000AHF868H,0006H.data.word 011h,022h,033h.bss buffer,10ptr .word0123h.textadd:LD 0fh,Aaloop:SUB#1,ABCaloop,AGEQ.dataivals .word 0aah,0bbh,0cchvar2 .usect“.newvars”,1inbuff .usect“.newvars”,7.textmpy:LD 0ah,Bmloop:MPY#0ah,B BC mloop,BNOV .sect “vectors”.word 011h,033h练习:练习:.text100FHF010H0001HF8

11、42H0001H110AHF166H000AHF868H0006H.data0011h0022h0033h0123h00aah00bbh00cch.bss保留保留10个字空个字空间间.newvars保留保留8个字空个字空间间.vectors0011h0033h源程序的行号源代码(机器码)源程序123456789101112131415161718100FHF010H,0001HF842H,0001H110AHF166H,000AHF868H,0006H.data.word 011h,022h,033h.bss buffer,10ptr .word0123h.textadd:LD 0fh,Aal

12、oop:SUB#1,ABCaloop,AGEQ.dataivals .word 0aah,0bbh,0cchvar2 .usect“.newvars”,1inbuff .usect“.newvars”,7.textmpy:LD 0ah,Bmloop:MPY#0ah,B BC mloop,BNOV .sect “vectors”.word 011h,033h汇编后建立的段汇编后建立的段:附录附录1.常用的汇编伪指令附录附录2条件汇编伪指令条件汇编伪指令.if、.elseif、.else、.endif伪指令告诉汇编器按照表达式的计算结果对代码块进行条件汇编。伪指令告诉汇编器按照表达式的计算结果对代

13、码块进行条件汇编。n.if expression 标志条件块的开始,仅当条件为真(标志条件块的开始,仅当条件为真(expression的值非的值非0即为真)时汇编代码。即为真)时汇编代码。n.elseif expression 标志若标志若.if条件为假,而条件为假,而.elseif条件为真时要汇编代码块。条件为真时要汇编代码块。n.else 标志若标志若.if条件为假时要汇编代码块。条件为假时要汇编代码块。n.endif 标志条件块的结束,并终止该条件代码块。标志条件块的结束,并终止该条件代码块。附录附录3引用其他文件和初始化常数伪指令引用其他文件和初始化常数伪指令n.include 文件名

14、文件名 将指定文件复制到当前位置,其内容可以是程序、数据、符号定义等。将指定文件复制到当前位置,其内容可以是程序、数据、符号定义等。n.copy 文件名文件名 与与.include类似。类似。n.def 符号名符号名 在当前文件中定义一个符号,可以被其他文件使用。在当前文件中定义一个符号,可以被其他文件使用。n.ref 符号名符号名 在其他文件中定义,可以在本文件中使用的符号。在其他文件中定义,可以在本文件中使用的符号。n.global 符号名符号名 其作用相当于其作用相当于.def、.ref效果之和。效果之和。n.mmregs 定义存储器映射寄存器的符号名,这样就可以用定义存储器映射寄存器的

15、符号名,这样就可以用AR0、PMST等助记符替换实际的存储器地址。等助记符替换实际的存储器地址。n.float 数数1,数,数2 指定的各浮点数连续放置到存储器中(从当前段指针开始)。指定的各浮点数连续放置到存储器中(从当前段指针开始)。n.word 数数1,数,数2 指定的各数(十六进制)连续放置到存储器中。指定的各数(十六进制)连续放置到存储器中。n.space n 以位为单位,空出以位为单位,空出n位存储空间。位存储空间。n.end 程序块结束。程序块结束。附录附录4宏定义和宏调用宏定义和宏调用TMS320C54x汇编支持宏语言。如果程序中需要多次执行某段程序,可以把这段程序定义(宏定义

16、)为一个宏,汇编支持宏语言。如果程序中需要多次执行某段程序,可以把这段程序定义(宏定义)为一个宏,然后在需要重复执行这段程序的地方调用这条宏。然后在需要重复执行这段程序的地方调用这条宏。n宏定义如下:宏定义如下:Macname.macroparameter 1,parameter n .mexit .endm 宏调用的格式宏调用的格式:labellabel:macname parameter1,macname parameter1,parametern,parametern1 *23 *add34 *5 *ADDRP=P1+P2+P3 ;说明宏功能说明宏功能67 add3 .macro p1,

17、p2,p3,ADDRP;定义宏定义宏89 LD p1,A ;将参数将参数1赋给赋给A10 ADD p2,A ;将参数将参数2与与A相加相加11 ADD p3,A ;将参数将参数3与与A相加相加12 STL A,ADDRP ;将结果将结果A的低字存参数的低字存参数413 .endm ;结束宏结束宏141516 .global abc,def,ghi,adr;定义全局符号定义全局符号1718 000000 add3 abc,def,ghi,adr;调用宏调用宏11 000000 1000!LD abc,A ;宏展开宏展开1 000001 0000!ADD def,A 1 000002 0000!A

18、DD ghi,A1 000003 8000!STL A,adr附录附录.例例 宏定义、宏调用和宏展开宏定义、宏调用和宏展开链接器对段的处理链接器对段的处理链接器处理段,主要是完成链接器处理段,主要是完成2个任务:个任务:l把一个或多个把一个或多个COFF目标文件(目标文件(.obj)中的各个段作为链接器的输入段,经链接以后在一个可执行的)中的各个段作为链接器的输入段,经链接以后在一个可执行的COFF输出模块中建立各个输出段。输出模块中建立各个输出段。l为各个输出段选定存储器地址。为各个输出段选定存储器地址。链接器的任务通过链接命令文件(链接器的任务通过链接命令文件(.cmd)完成,链)完成,链

19、接命令文件则主要是通过接命令文件则主要是通过2条伪命令实现:条伪命令实现:lMEMORY此命令用来定义目标系统实际存在的存储器配置图,包括对存储器各部分命名,以及规此命令用来定义目标系统实际存在的存储器配置图,包括对存储器各部分命名,以及规定它们的起始地址和长度定它们的起始地址和长度lSECTIONS 此命令告诉链接器如何将输入段组合成输出段,以及将输出段放在存储器的什么位置此命令告诉链接器如何将输入段组合成输出段,以及将输出段放在存储器的什么位置两个文件两个文件file1.asm和和file2.asm经汇编后形经汇编后形成两个目标文件成两个目标文件file1.obj和和file2.obj,形

20、成的各个,形成的各个段如右图所示:段如右图所示:例:例:对对file1.obj、file2.obj链链接后结果如右图所示:接后结果如右图所示:对对file1.obj、file2.obj默认默认链接:链接器默认的存储器分配如图所示:链接:链接器默认的存储器分配如图所示:3.3 C语言程序设计语言程序设计3.3.1 vectors.asm源文件的编写源文件的编写3.3.2 C语言主体源程序的编写语言主体源程序的编写3.3.3 5402.h头文件的编写头文件的编写3.3.4 5402.cmd命令文件的编写命令文件的编写3.3.5 C项目的编程与调试实例项目的编程与调试实例若用户要建立一个若用户要建立

21、一个C语言软件项目,该项目必须包括以下文件(以建一个项目语言软件项目,该项目必须包括以下文件(以建一个项目example为例):为例):vectors.asm;定义复位、中断矢量源文件。;定义复位、中断矢量源文件。example.c ;主体源程序。;主体源程序。c5402.h;定义;定义C5402内部控制及状态寄存器。内部控制及状态寄存器。c5402.cmd ;定义存储空间,并为段分配空间。定义存储空间,并为段分配空间。rts.lib ;运行库文件,由运行库文件,由TI提供。提供。3.3.1 vectors.asm源文件的编写源文件的编写C的主程序是的主程序是main,DSP复位时跳转到地址为

22、复位时跳转到地址为FF80H的位置,如何从的位置,如何从FF80H跳转到跳转到main执行?执行?rts.lib运行时间支持库函数解决了该问题:它提供了名称为运行时间支持库函数解决了该问题:它提供了名称为_c_int00的引导程序,通过执行该程序能进入到的引导程序,通过执行该程序能进入到main主程序。主程序。那如何从那如何从FF80H到到_c_int00,我们只需在,我们只需在FF80H的位置放置一条汇编跳转指令:的位置放置一条汇编跳转指令:B _c_int00即启动过程:即启动过程:DSP复位复位(地址:地址:FF80H,存放指令:,存放指令:B _c_int00;)rts.lib的引导程

23、序的引导程序_c_int00main。同理,中断也是如此。同理,中断也是如此。因此我们把因此我们把中断矢量中断矢量的设置形成一个文件的设置形成一个文件vectors.asm,如:,如:.ref _c_int00,_NMI_INT,_SOFT_INT.sect.vectorsRSB_c_int00NOPNOPNMI B_NMI_INTNOPNOPSINT2B_SOFT_INTNOPNOPSINT3B_SOFT_INTNOPNOP3.3.2 C主体源程序的编写主体源程序的编写nC语言中常用的关键字语言中常用的关键字nC与汇编混和编程与汇编混和编程 及注意事项及注意事项#include c5402r

24、es.h#include init_5402.cioport 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;port8007=a;asm(nop );void interrupt NMI_INT()return;void interrupt SOFT_I

25、NT()return;给出包含的头文件给出包含的头文件I/O端口定义端口定义系统主程序系统主程序CPU的初始化的初始化I/O端口输入输出控制程序端口输入输出控制程序中断服务子程序中断服务子程序DSP的的C语言中常用关键字语言中常用关键字nconst用用const对任何变量或数组进行限定对任何变量或数组进行限定,保证它们的值不被改变保证它们的值不被改变.如如:const int a=0 x80nioport用用ioport定义定义I/O端口空间端口空间.格式为格式为:ioport data_type port hex_num即定义即定义port hex_num是一个是一个I/O端口端口,hex_

26、num是这个是这个I/O端口的地址端口的地址.如如:ioport unsigned port0000port0000=0 x10 ;把把10h数据写到地址为数据写到地址为0000h端口端口ninterrupt用来定义中断函数用来定义中断函数.与汇编语言中的中断子程序类似与汇编语言中的中断子程序类似.如如:void interrupt c_int02()prevectors();nnear和和far用来指定函数调用的方式用来指定函数调用的方式.用用near时时,编译时使用编译时使用CALL指令产生调用指令产生调用,用用far时时,编译时使用编译时使用FCALL指指令产生指指令产生调用调用.如如:

27、far int foo();FCALL foo;near foo();CALL foo;nC/C+的段(的段(Sections)和汇编语言类似,也分为初始化和未初始化两类;和汇编语言类似,也分为初始化和未初始化两类;初始化段(初始化段(Initialized Sections):运行中不变):运行中不变n.cinit:tables for initializing variables and constantsn.pinit:table for calling global object constructorsn.const:string constant and data(excludin

28、g volatile)n.switch:table for switch statementsn.text:all executable code,string literals and constants未初始化段(未初始化段(Uninitialized Sections):运行中变化):运行中变化n.bss:reserves data spaces for global,static varsn.stack:allocates space for system stackn.system:allocates space for dynamic memoryDSP的的C语言中的段语言中的段n

29、C/C+段存储段存储SectionMemoryPageSectionMemoryPage.bssRAM1.textROM or RAM0.cinit.pinitROM or RAM0.stackRAM1.constROM or RAM1.switchROM or RAM0.dataROM or RAM1.systemRAM1Data memory,Program memory C与汇编的混合编程及注意事项与汇编的混合编程及注意事项独立的独立的C和汇编模块的接口:和汇编模块的接口:nC编译器将编译器将C程序中定义的所有标识符前加了一个程序中定义的所有标识符前加了一个“_”。因此,汇编程序中的变量

30、或子程序若要被。因此,汇编程序中的变量或子程序若要被C程序调用,程序调用,则在汇编程序中这些变量或子程序名前要加上则在汇编程序中这些变量或子程序名前要加上“_”。n在在C中,若要调用汇编中的变量或子程序,则必须在中,若要调用汇编中的变量或子程序,则必须在C中声明该子程序为外部,在汇编中用中声明该子程序为外部,在汇编中用.global声明变量声明变量为外部变量,函数为全局函数。为外部变量,函数为全局函数。n在汇编中要引用在汇编中要引用C中定义的符号,在汇编中要用中定义的符号,在汇编中要用.ref将该符号进行说明。若在汇编中定义的符号可以被将该符号进行说明。若在汇编中定义的符号可以被C中中引用,则

31、在汇编中应将该符号用引用,则在汇编中应将该符号用.def说明。说明。n可在可在C中直接嵌入汇编语句。格式为:中直接嵌入汇编语句。格式为:asm(“汇编语句汇编语句 ”);如:如:asm(“NOP”);n使用使用C语言编程,必须使用语言编程,必须使用c或或cr链接,这时链接,这时_c_int00被自动定义为程序的进入点,因此,复位矢量应跳转被自动定义为程序的进入点,因此,复位矢量应跳转到到_c_int00.清楚并遵循以上规则后,清楚并遵循以上规则后,C程序的编写方法与我们所学过的程序的编写方法与我们所学过的C编程一样。编程一样。CPU初始化子程序初始化子程序init_5416编写编写需初始化的相

32、关寄存器:需初始化的相关寄存器:PMST,ST0,ST1,IFR,IMR,SWWSR,BSCRvoid init_5416()asm(SSBX INTM);PMST=0X00E0;/MP=1,OVLY=1,IPTR=1;ST0=0;ST1=0X4960;/CPL=1,INTM=1,SXM=1,FRCT=1,CMPT=1IFR=0XFFFF;IMR=0;SWWSR=0X7FFF;/BSCR=0XFFFF;CPL必须为必须为1,定义直接寻址方,定义直接寻址方式,式,OVM定义为定义为03.3.3 链接命令文件编写(链接命令文件编写(CMD文件)文件).cmd文件要包括以下内容:文件要包括以下内容:

33、l要链接的文件名要链接的文件名l链接的选项(也可以通过链接的选项(也可以通过CCS build option设置)设置)l存储器的配置存储器的配置这些内容主要是由这些内容主要是由MEMORY和和SECTIONS两命令两命令和其他的一些链接命令及选项实现。和其他的一些链接命令及选项实现。一、一、MEMORY命令命令此命令用来定义目标系统的存储器配置图,此命令用来定义目标系统的存储器配置图,包括对存储器各部分命名,以及规定它们的包括对存储器各部分命名,以及规定它们的起始地址和长度。起始地址和长度。语法:语法:MEMORYPAGE 0:name0(attri):origin=常数,常数,length

34、=常数常数PAGE 1:name1(attri):origin=常数,常数,length=常数常数PAGE n:namen(attri):origin=常数,常数,length=常数常数PAGE:指定存储器空间页面,最多:指定存储器空间页面,最多255页。页。通常:通常:PAGE 0:程序存储器:程序存储器PAGE 1:数据存储器:数据存储器PAGE 2:I/O空间空间Name:存储器区间名。一页里可以有多个区:存储器区间名。一页里可以有多个区 间,但同一页的区间名不能相同,且地间,但同一页的区间名不能相同,且地 址不能重叠,不同页里的区间名可以相址不能重叠,不同页里的区间名可以相 同,但地址

35、也不能重叠。同,但地址也不能重叠。attri:属性(选项)。:属性(选项)。R:可读;:可读;W:可写;:可写;X:可装入执行程:可装入执行程 序代码;序代码;I:可进行初始化。:可进行初始化。若不写,则具有以上所有属性。若不写,则具有以上所有属性。origin:区间起始地址。:区间起始地址。length:区间的长度。:区间的长度。fill(选项):可简写为(选项):可简写为f,指定存储器区间的填充字符。该值为两个字节的整型常数。,指定存储器区间的填充字符。该值为两个字节的整型常数。C5402的存储器配置。的存储器配置。MEMORYPAGE 0:PROG:origin=0 x0100,leng

36、th=0 x2000 vect:origin=0 x0080,length=0 x80 PAGE 1:DARAM:origin=0 x2100,length=0 x1000 PAGE 2:IO:origin=0 x0000,length=0 x10000注意:语法中大写的词在实际编写文件时也一定要大注意:语法中大写的词在实际编写文件时也一定要大写,如写,如PAGE,MEMORY。例:例:若若5402工作在工作在MP模式,模式,OVLY=0,外部扩展一,外部扩展一个个64K的程序存储器的程序存储器flash,要求片内,要求片内DARAM全部配置为数据空间,将全部配置为数据空间,将64K的的fla

37、sh全部配置全部配置为程序空间,且要把为程序空间,且要把128字的中断向量地址范围字的中断向量地址范围单独分个区间,请用单独分个区间,请用MEMORY写出存储器配置写出存储器配置文件。文件。练习:练习:MEMORYPAGE 0:PROG:origin=0 x0000,length=0 xff80 vect:origin=0 xff80,length=0 x80 PAGE 1:DARAM:origin=0 x0000,length=0 x4000二、二、SECTIONS命令命令任务:任务:n说明如何将输入段组合成输出段;说明如何将输入段组合成输出段;n在可执行程序中定义输出段;在可执行程序中定义

38、输出段;n规定输出段在存储器中的存放位置;规定输出段在存储器中的存放位置;允许重新命名输出段。允许重新命名输出段。语法:语法:SECTIONS.name:property,property .name:property,property .name:property,propertyName:输出段名称:输出段名称Property:性质,包括以下内容:性质,包括以下内容:l1.装载位置(装载位置(load allocation)loadallocationor allocationor allocation如:如:.text:load0 x1000or.text:0 x1000or.text:

39、0 x1000l2.运行位置(运行位置(run allocation)runallocationor allocationor allocationl3.输入段(输入段(input sections)input_section1,input_section2如:如:file1.obj(.text),file2.obj(.text)file1.obj(.data),file2.obj(.data)l4.段类型(段类型(section type)typeCOPYor typeDSECTortypeNOLOADl5.填充值(填充值(fill value)fill=value name:=value

40、理论上讲,连接器可对每个输出段在目标存储器中赋予两个地址:装入地址和运行地址。但大多数情况下,这理论上讲,连接器可对每个输出段在目标存储器中赋予两个地址:装入地址和运行地址。但大多数情况下,这两个地址是相同的。两个地址是相同的。这种将输出段定位在目标存储器中并赋予地址的过程称为段的定位这种将输出段定位在目标存储器中并赋予地址的过程称为段的定位(allocation)。定位还可以通过指定一个或多个参数来控制。定位还可以通过指定一个或多个参数来控制。Binding:将段定位到指定的地址。将段定位到指定的地址。如:如:.text:load=0 x1000Memory:将段定位到由:将段定位到由MEM

41、ORY伪指令定义的具有指定名称(如伪指令定义的具有指定名称(如PROG,DARAM)或属性的地址空间。)或属性的地址空间。如:如:.text:loadPROGAlignment:指定段的起始地址边界。指定段的起始地址边界。如如:.text:align=0 x80Page:指定要使用的存储器页面。指定要使用的存储器页面。如:如:.text:PAGE 0SECTIONS.text:progPAGE 0.vectors:vectsPAGE 0.data:progPAGE 0.bss:dramPAGE 1注意:这里段加载位置一定是在注意:这里段加载位置一定是在MEMORY中有中有定义的存储器区间。定义

42、的存储器区间。例:例:三、三、cmd文件编写文件编写例例3.5:对一个目标文件:对一个目标文件add.obj的链接命令文件编写。的链接命令文件编写。add.obj-m add.map-o add.outMEMORYPAGE 0:PROG:origin=0 x0100,length=0 x2000 vect:origin=0 x0080,length=0 x7f PAGE 1:DARAM:origin=0 x2100,length=0 x1000 PAGE 2:IO:origin=0 x0000,length=0 xffffSECTIONS.text:ROM PAGE 0.vectors:VEC

43、SPAGE 0.data:ROM PAGE 0.bss:RAM PAGE 1C项目中项目中cmd命令文件的编写命令文件的编写一、一、C编译器生成的段编译器生成的段已初始化段:已初始化段:.text段:包括可执行代码、字符串和编译器的常量。段:包括可执行代码、字符串和编译器的常量。.cinit段:包括初始化变量和常数表。例:段:包括初始化变量和常数表。例:int a1.const段:字符串常量和以段:字符串常量和以const关键字定义的常关键字定义的常量。例:量。例:const pi=3.1415926.switch段:为段:为.switch语句建立的表格。语句建立的表格。未初始化段:未初始化段

44、:.bss段:保留全局和静态变量空间。段:保留全局和静态变量空间。.stack段:为段:为C的系统堆栈分配存储空间。的系统堆栈分配存储空间。.system段:为动态存储器函数段:为动态存储器函数malloc,calloc,realoc分配存储器空间。分配存储器空间。说明说明:.text,.cinit,.switch段必须链接到程序段必须链接到程序PAGE 0(ROM或或RAM)中中;.const段必须链接到段必须链接到PAGE 1(ROM或或RAM)中中;.bss,.stack,.system段必须链接到段必须链接到PAGE 1(RAM)中中;vectors.objExample.obj-o

45、example.out-m example.mapMEMORYPAGE 0:PROG:origin=0 x0100,length=0 x2000 /*OVLY=1,DARAMvect:origin=0 x0080,length=0 x80PAGE 1:DARAM:origin=0 x2100,length=0 x1000PAGE 2:IO:origin=0 x0000,length=0 xffffSECTIONS.text:PROG PAGE 0.vectors:vect PAGE 0.bss:DARAM PAGE 1.data:PROG PAGE 0.cinit:PROG PAGE 0.co

46、nst:DARAM PAGE 1.switch:PROG PAGE 0.stack:DARAM PAGE 1.system:DARAM PAGE 1要链接的文件要链接的文件3.3.4 C5402.h头文件的编写头文件的编写若要在若要在C源程序中使用源程序中使用5402 DSP的的控制及状态寄存器控制及状态寄存器(如:(如:ST0、ST1等),必须对这些寄存器进行定义,否则会等),必须对这些寄存器进行定义,否则会出错。出错。一、编写一、编写以在以在C中把中把ST0状态寄存器设置为状态寄存器设置为FFH为例:为例:#define ST0(volatile unsigned int*)0 x0006

47、OR#define ST0*(volatile unsigned int*)0 x0006ORvolatile unsigned int*ST0=(volatile unsigned int*)0 x0006;*ST0=0 xFF;ORST0=0XFF;OR*ST0=0XFF这些定义可以写在这些定义可以写在C源程序中,但源程序中,但DSP的状态寄存的状态寄存器与控制寄存器很多,因此我们可以专门把这些定器与控制寄存器很多,因此我们可以专门把这些定义作成一个文件(头文件),这样,只需在义作成一个文件(头文件),这样,只需在C源程源程序中包含该头文件就能直接访问序中包含该头文件就能直接访问DSP的状

48、态与控制的状态与控制寄存器。寄存器。二、添加头文件二、添加头文件在在C中中:#include“c5402.h”Main()St0=0 xff;附:主要参考资料附:主要参考资料nTMS320C54X DSP应用程序设计与开发应用程序设计与开发,刘益成编,北京航天航空大学出版社,刘益成编,北京航天航空大学出版社,2002.5;nTMS320C54x Optimizing CC+Compiler Users GuidenTMS320C54x C Source Debugger Users Guide3.3.5 C项目的编程与调试实例项目的编程与调试实例例例练习练习1:51iixy51iaixiy#i

49、nclude struct addfloat x1,x2,x3,x4,x5,y;add1;double a5;double y,x;void main()add1.x1=3;add1.x2=3;add1.x3=2;add1.x4=2;add1.x5=2;a0=1;a1=2;a2=3;a3=4;a4=5;add1.y=add1.x1*a0+add1.x2*a1+add1.x3*a2+add1.x4*a3+add1.x5*a4;y=add1.y;x=exp(2);while(1);调试注意事项调试注意事项n检查项目文件添加是否完整检查项目文件添加是否完整nBuild option中的中的link选

50、项要选择选项要选择-cn根据需要检查根据需要检查map文件存储器安排是否正确文件存储器安排是否正确n装载的是装载的是.out文件文件例例 请将使用请将使用C语言编程实现:语言编程实现:ARP2,CPL=0,SXM=1,MP/MC=1,OVLY=1.1、用、用c语言操作语言操作DSP片内控制寄存器,应对片内控制寄存器先定义,并将定义作为头文件片内控制寄存器,应对片内控制寄存器先定义,并将定义作为头文件5402.H:#define ST0 *(volatile unsigned int*)0 x0006#define ST1*(volatile unsigned int*)0 x0007#defi

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|