有关DSP程序编写和调试

DSP仿真器为什么必须连接目标系统(Target)?

 
      DSP的仿真器同单片机的不同,仿真器中没有DSP,提供IEEE标准的JTAG口对DSP进行仿真调试,所以仿真器必须有仿真对象,及目标系统。目标系统就是你的产品,上面必须有DSP。仿真器提供JTAG同目标系统的DSP相接,通过DSP实现对整个目标系统的调试。
 
      仿真工作正常对于DSP的基本要求
 
      1)DSP电源和地连接正确。
 
      2)DSP时钟正确。
 
      3)DSP的控制信号RS和HOLD信号接高电平。
 
      4)C2000的watchdog关掉。
 
      5)不可屏蔽中断NMI上拉高电平。
 
      CCS或Emurst运行时提示“Can't Initialize Target DSP”
 
      1)仿真器连接是否正常?
 
      2)仿真器的I/O设置是否正确?
 
      3)XDSPP仿真器的电源是否正确?
 
      4)目标系统是否正确?
 
      5)仿真器是否正常?建议使用目标板测试。
 
      DSP的C语言同主机C语言的主要区别?
 
      1)DSP的C语言是标准的ANSI C,它不包括同外设联系的扩展部分,如键盘输入、屏幕显示等。但在CCS中,为了方便调试,可以将数据通过prinf命令虚拟输出到主机的屏幕上。
 
      2)DSP的C语言的编译过程为,C编译为ASM,再由ASM编译为OBJ。因此C和ASM的对应关系非常明确,非常便于人工优化。
 
      3)DSP的代码需要绝对定位;主机的C的代码有操作系统定位。
 
      4)DSP的C的效率较高,非常适合于嵌入系统。
 
      Link的cmd文件的作用是什么?
 
      Link的cmd文件用于DSP代码的定位。由于DSP的编译器的编译结果是未定位的,DSP没有操作系统来定位执行代码,每个客户设计的DSP系统的配置也不尽相同,因此需要用户自己定义代码的安装位置。以C5000为例,基本格式为: -o sample.out -m sample.map -stack 100 sample.obj meminit.obj -l rts.lib MEMORY { PAGE 0: VECT: origin = 0xff80, length 0x80 PAGE 0: PROG: origin = 0x2000, length 0x400 PAGE 1: DATA: origin = 0x800, length 0x400 } SECTIONS { .vectors : {} >PROG PAGE 0 .text : {} >PROG PAGE 0 .data : {} >PROG PAGE 0 .cinit : {} >PROG PAGE 0 .bss : {} >DATA PAGE 1
}
 
      如何将OUT文件转换为可以烧写ROM的文件格式?
 
      DSP的开发软件集成了一个程序,可以从执行文件OUT转换到编程器可以接受的格式,使得编程器可以用次文件烧写EPROM或Flash。对于C2000的程序为DSPHEX;对于C3x程序为HEX30;对于C54x程序为HEX500;对于C55x程序为HEX55;对于C6x程序为Hex6x。以C32为例,基本格式为: sample.out -x -memwidth 8 -bootorg 900000h -iostrb 0h -strb0 03f0000h -strb1 01f0000h -o sample.hex ROMS { EPROM: org = 0x900000,len=0x02000,romwidth=8 } SECTIONS { .text: paddr=boot .data: paddr=boot }
 
      在CCS下,OUT文件加载时提示“Data verification failed...”的原因?
 
      Link的CMD文件分配的地址同GEL或设置的有效地址空间不符。中断向量定位处或其它代码、数据段定位处,没有RAM,无法加载OUT文件。解决方法:
 
      1)调整Link的CMD文件,使得定位段处有RAM。
 
      2)调整存储器设置,使得RAM区有效。
 
      TI DSP的C语言的特点,如何使我编写的C更高效?
 
      TI DSP的C语言是标准的ANSI的C,是一个专门优化的C。对于C3x/C5000/C6000的用户,C对于ASM的效率可以达近1:1。 TI的DSP,每个系列有每个的特点。要编制高效的C程序,建议:
 
      1)根据DSP的特点,调整程序编写的流程,任务的分配。
 
      2)数据尽量放在片内。
 
      3)对于要求高的子程序,用人工优化或ASM编写。
 
      为什么要使用BIOS?
 
      1)BIOS是Basic I/O System的简称,是基本的输入、输出管理。
 
      2)用于管理任务的调度,程序实时分析,中断管理,跟踪管理和实时数据交换。
 
      3)BIOS是基本的实时系统,使用BIOS可以方便地实现多任务、多进程的时间管理。
 
      4)BIOS是eXpress DSP的标准平台,要使用eXpress DSP技术,必须使用BIOS。
 
      如何从老的编译工具升级到CCS?
 
      1)在Project菜单下,创建project。
 
      2)将源文件(C和ASM文件),加入project中。
 
      3)将Link的CMD加入project中,并将CMD中的库文件设置去除。
 
      4)将include文件和库文件加入project中。
      5)设置编译的选项。
 
      软件等待的如何使用?
 
      DSP的指令周期较快,访问慢速存储器或外设时需加入等待。等待分硬件等待和软件等待,每一个系列的等待不完全相同。
 
      1)对于C2000系列: 硬件等待信号为READY,高电平时不等待。软件等待由WSGR寄存器决定,可以加入最多7个等待。其中程序存储器和数据存储器及I/O可以分别设置。
 
      2)对于C3x系列: 硬件等待信号为/RDY,低电平是不等待。软件等待由总线控制寄存器中的SWW和WTCNY决定,可以加入最多7个等待,但等待是不分段的,除了片内之外全空间有效。
 
      3)对于C5000系列: 硬件等待信号为READY,高电平时不等待。软件等待由SWWCR和SWWSR寄存器决定,可以加入最多14个等待。其中程序存储器、控制程序存储器和数据存储器及I/O可以分别设置。
 
      4)对于C6000系列(只限于非同步存储器或外设): 硬件等待信号为ARDY,高电平时不等待。 软件等待由外部存储器接口控制寄存器决定,总线访问外部存储器或设备的时序可以设置,可以方便的同异步的存储器或外设接口
 
      中断向量为什么要重定位?
 
      为了方便DSP存储器的配置,一般DSP的中断向量可以重新定位,即可以通过设置寄存器放在存储器空间的任何地方。注意:C2000的中断向量不能重定位。
 
      什么是boot loader?
 
      DSP的速度尽快,EPROM或flash的速度较慢,而DSP片内的RAM很快,片外的RAM也较快。为了使DSP充分发挥它的能力,必须将程序代码放在RAM中运行。为了方便的将代码从ROM中搬到RAM中,在不带flash的DSP中,TI在出厂时固化了一段程序,在上电后完成从ROM或外设将代码搬到用户指定的RAM中。此段程序称为“boot loader”。
 
      Boot有问题如何解决?
 
      1)仔细检查boot的控制字是否正确。
 
      2)仔细检查外部管脚设置是否正确。
 
      3)仔细检查hex文件是否转换正确。
 
      4)用仿真器跟踪boot过程,分析错误原因。
 
      DSP有哪些数学库及其它应用软件?
 
      MATH库,FFT,FIR/IIR等,可以在TI的网页免费下载,具体地址为 ftp://ftp.ti.com/pub/tms320bbs/00index.htm
 
      如何获得DSP专用算法?
 
      TI有许多的Third Party可以通过DSP上的多种算法软件。可以通过TI的网页搜索你所需的算法,找到通过算法的公司,同相应的公司联系。注意这些算法都是要付费的。
 
  eXpressDSP是什么?

eXpressDSP是一种实时DSP软件技术,它是一种DSP编程的标准,利用它可以加快你开发DSP软件的速度。 以往DSP软件的开发没有任何标准,不同的人写的程序一般无法连接在一起。DSP软件的调试工具也非常不方便。使得DSP软件的开发往往滞后于硬件的开发。 eXpressDSP集成了CCS(Code Composer Studio)开发平台,DSP BIOS实时软件平台,DSP算法标准和第三方支持四部分。利用该技术,可以使你的软件调试,软件进程管理,软件的互通及算法的获得,都便的容易。这样就可以加快你的软件开发进程。

 
      1)CCS是eXpressDSP的基础,因此你必须首先拥有CCS软件。
 
      2)DSP BIOS是eXpressDSP的基本平台,你必须学会所有DSP BIOS。
 
      3)DSP算法标准可以保证你的程序可以方便的同其它利用eXpressDSP技术的程序连接在一起。同时也保证你的程序的延续性。
 
      C语言中可以嵌套汇编语言?
 
      可以。在ANSI C标准中的标准用法就是用C语言编写主程序,用汇编语言编写子程序,中断服务程序,一些算法,然后用C语言调用这些汇编程序,这样效率会相对比较高。
 
      在定点DSP系统中可否实现浮点运算?
 
      当然可以,因为DSP都可以用C,只要是可以使用c语言的场合都可以实现浮点运算。
 
      对于C5000,大于48K的程序如何BOOT?
 
      对于C5000,片内的BOOT程序在上电后将数据区的内容,搬移到程序区的RAM中,因此FLASH必须在RESET后放在数据区。由于C5000,数据区的空间有限,一次BOOT的程序不能对于48K。解决的方法如下:
 
      1.在RESET后,将FLASH译码在数据区,RAM放在程序区,片内BOOT程序将程序BOOT到RAM中。
 
      2.用户初试化程序发出一个I/O命令(如XF),将FLASH译码到程序区的高地址。开放数据区用于其它的RAM。
 
      3.用户初试化程序中包括第二次BOOT程序(此程序必须用户自己编写),将FLASH中没有BOOT的其它代码搬移到RAM中。
 
      4.开始运行用户处理程序。
 
      include头文件(.h)的主要作用
 
      头文件,一般用于定义程序中的函数、参数、变量和一些宏单元,同库函数配合使用。因此,在使用库时,必须用相应的头文件说明。
 
      DSP中断向量的位置
 
      1)2000系列dsp的中断向量只能从0000H处开始。所以在我们调试程序的时候,要把DSP选择为MP(微处理器方式),把片内的Flash屏蔽掉,免去每次更改程序都要重新烧写Flash工作。
2)3x系列dsp的中断向量也只能在固定的地址。
 
      3)5000,6000系列dsp的中断向量可以重新定位。但是它只能被重新定位到Page0范围内的任何空间。
 
      如何设置硬件断点?
 
      在profiler ->profile point -> break point
 
      c54x的外部中断是电平响应还是沿响应?
 
      是沿响应,准确的说,它要检测到100(一个clk的高和两个clk的低)的变化才可以。
 
      DSP/BIOS能否在TMS320C54x系列DSP的扩展内存中运行?
 
      能。DSP/基本输入输出系统构置工具允许用户在GlobalSetting条件下选择适宜的库。DSP/基本输入输出系统要求基本输入输出系统、Sysinit和Vect部分放到存储器(0x000000-0x008000)的重叠部分(OVLY=1)。这些部分(.基本输入输出系统、.sysinit、.vect)含有轮询程序以支持扩展的存储器,并期望在起始序列中。余下的部分和对象可以置于存储器的任何位置。
 
      参考程序,里面好象都要 disable wachdog,不知道为什么?
 
      "watchdog是一个计数器,溢出时会复位你的DSP,不disable的话,你的系统会动不动就reset。
 
      是否必需对浮点运算作人工的代码调整。C编译器是否不能自动对浮点运算进行处理?
 
      1.浮点不需要人工调整 ;
 
      2.C可以主动处理浮点运算
 
      未用的输入/输出引脚的处理
 
      1,未用的输入引脚不能悬空不接,而应将它们上拉活下拉为固定的电平
 
      1)关键的控制输入引脚,如Ready、Hold等,应固定接为适当的状态,Ready引脚应固定接为有效状态,Hold引脚应固定接为无效状态
 
      2)无连接(NC)和保留(RSV)引脚,NC 引脚:除非特殊说明,这些引脚悬空不接,RSV引脚:应根据数据手册具体决定接还是不接
 
      3)非关键的输入引脚,将它们上拉或下拉为固定的电平,以降低功耗
 
      2,未用的输出引脚可以悬空不接
 
      3,未用的I/O引脚:如果确省状态为输入引脚,则作为非关键的输入引脚处理,上拉或下拉为固定的电平;如果确省状态为输出引脚,则可以悬空不接
 
      C程序的代码和数据如何定位
 
      1,系统定义:.cinit  存放C程序中的变量初值和常量;.const 存放C程序中的字符常量、浮点常量和用const声明的常量;.switch 存放C程序中switch语句的跳针表;.text  存放C程序的代码;.bss  为C程序中的全局和静态变量保留存储空间;.far  为C程序中用far声明的全局和静态变量保留空间;.stack 为C程序系统堆栈保留存储空间,用于保存返回地址、函数间   的参数传递、存储局部变量和保存中间结果;.sysmem 用于C程序中malloc、calloc和realloc函数动态分配存储空间
2,用户定义:#pragma CODE_SECTION (symbol, "section name");#pragma DATA_SECTION (symbol, "section name")
 
      为什么要设计CSL?
 
      1,DSP片上外设种类及其应用日趋复杂
 
      2,提供一组标准的方法用于访问和控制片上外设
 
      3,免除用户编写配置和控制片上外设所必需的定义和代码
 
      什么是CSL?
 
      1,用于配置、控制和管理DSP片上外设
 
      2,已为C6000和C5000系列DSP设计了各自的CSL库
 
      3,CSL库函数大多数是用C语言编写的,并已对代码的大小和速度进行了优化
 
      4,CSL库是可裁剪的:即只有被使用的CSL模块才会包含进应用程序中
 
      5,CSL库是可扩展的:每个片上外设的API相互独立,增加新的API,对其他片上外设没有影响
 
      CSL的特点
 
      1),片上外设编程的标准协议:定义一组标准的APIs:函数、数据类型、宏;
 
      2),对硬件进行抽象,提取符号化的片上外设描述:定义一组宏,用于访问和建立寄存器及其域值
 
      3)基本的资源管理:对多资源的片上外设进行管理;
 
      4)已集成到DSP/BIOS中:通过图形用户接口GUI对CSL进行配置;
 
      5)使片上外设容易使用:缩短开发时间,增加可移植
  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值