DSP CCS初学
DSP CCS初学调试问题汇总(更新中)
(2009-10-20 16:43:34)1.DSP/BIOS应用程序调试(2009.10.20)
在CCS2.0 的emulator写dsp/bios 的程序,编译链接无错误,而点击LOAD Program下载xxx.out完成时弹出如下对话框:
RTDX target application does not match emulation protocol!
Loaded program was created with an rtdx library which does not match the target device
这将导致RTDX(实时数据交换)不能使用
分析:
RTXD可以在DSP/BIOS中使用,也可以脱离DSP/BIOS使用;目前CCS Simulator不支持RTDX,故RTDX必须在Emulator下使用,即还需要硬件仿真器和DSP目标板。
故这是由于下载BIOS/DSP程序时RTDX设置错误导致的;
问题解决如下:
把DSP/BIOS配置窗口中的input/output-->RTDX -real-Time Exchange settings的RTDX mode 改为JTAG(原来是simulator),重新编译后LOAD,上述警告消除,可以在模拟的情况下进行BIOS调试了。
PS:虽然simulator能编译运行DSP/BIOS程序,并能提供实时查询程序运行情况(主要是CPU负荷,时序,日志以及线程等)。但实际开发DSP/BIOS应用程序时为了真实的了解目标板的各种信息,仅有Simulator(软件仿真器)是不行的,还需要使用Emulator(硬件仿真器)和DSP/BIOS插件(安装时已装入)。
2.RTDX应用程序调试(10.22)
RTDX测试DSP Target传输数据到PC机:
a)创建工程,编辑源代码(.c/。asm),加入头文件(.h),库文件(.lib)以及链接命令文件(.cmd)
b)添加修改具有实时数据传输的RTDX语句
包括:#include <rtdx.h>; RTDX头文件(rtdx.h)
RTDX_CreateOutputChannel( ochan ); 定义一个全局的PC机数据输出通道,通道名可以任取
TARGET——INITIALIZE(); 初始化DSP目标系统;
RTDX_enableOutput( &ochan ); 使能输出通道写数据;
status=RTDX_write( &ochan,&data,sizeof(data) ); 传送数据至PC;
RTDX_disableOutput( &ochan ); 禁止输出通道传输数据。
c)进行数据处理,测试应用程序
编译链接完成后载入.out文件。在TOOLS-RTDX-Configration中设置RTDX使能,运行debug-run。
出现问题:下载可执行文件时提示
“Data verification failed at address 0x(某地址)Please verify target memory and memory map.”
按跳过提示下载完成后messages栏提示:
Can't Set Breakpoint: Error 0x00000008/-1076 Error during: Break Point, Cannot set/verify breakpoint at 0x80007958
Breakpoint Manager: An error was encountered attempting to set a breakpoint used
for end of program detection.
Can't Set Breakpoint: Error 0x00000008/-1076 Error during: Break Point, Cannot set/verify breakpoint at 0x800081B4
分析:根据CMD文件确认你的地址分配是否在DSP可分配的RAM中;如果给程序分配的地址不在片内的RAM段肯定是会出错的。可能CMD地址空间实际上不属于RAM映射地址范畴,导致不能正常读写。
另外如果DSP片内有程序正在运行,在下载新程序的时候也会出错。出现这种情况,可以在DSP启动前与CCS进行连接。
解决:更改cmd文件中的地址分配使之与OPTION中的Memory Map映射地址空间一致。
3.DSP硬件仿真环境问题汇总
a)无论是在硬件仿真环境还是软件仿真环境中都无法创建DSP项目,可能是安装时在以前安装过CCS的软件,导致冲突;链接文件.dll未注册,或者与系统文件不兼容,解决方法:建议备份文件后重装C盘
b)打开STEP后,无法初始化硬件仿真器
可能的原因是
CCS STEP中的硬件配置USB驱动安装或者I/O口出现错误(如1仿真器连接是否正常? 2仿真器的I/O设置是否正确? 3XDS仿真器的电源及仿真头是否正确? 4目标系统型号是否正确? 5仿真器是否正常?);
USB驱动程序未安装(从“我的电脑-管理”中可以查到是否安装成功驱动)
c)关于gel文件,memory map一致性问题
memory map的作用
1. 内存映射以页面为单位,将文件内容映射到内存中。
2. 使用内存映射可以创建内存映射文件。内存映射文件的优点是我们不需要调用 read 、write 之类的I/O函数,只需用从内存映射区取、存数据,实际的 I/O 操作是由内核执行的,可以简化代码。
3. 使用内存映射可以实现进程间共享内存。
选择有效的存储器空间映射关系
设计原则:CCS下的存储器空间设置应该与目标板的硬件实际配置一致,没有的存储器不要有效。这样便于调试,CCS会发现你调入程序时或程序运行时,是否访问了无效地址。
配置存储器空间映射的方法:
1)在GEL文件中设置;
2)在Option菜单下,选择Memory Map选项,根据你的硬件设置。注意一定要将Enable Memory Mapping置为使能。
常出现的相关情形:
出现以上情况均是由于内存单元设置不一致导致的。前图是由于点击option-memory map-Enable Memory Mapping项,CCS虽然使能了“Enable Memory Mapping”选项,但是初始化配置错误或者未作更改;后者通常是由于gel文件中设置分配的内存空间与存储器无法形成一一映射导致无法实际访问虚拟空间。
解决方法:更改gel文件重新合理分配内存单元。
OUT文件加载时提示“Data verification failed...”
Link的CMD文件分配的地址同GEL或设置的有效地址空间不符。中断向量定位处或其它代码、数据段定位处,没有RAM,无法加载OUT文件。
解决方法: 1)调整Link的CMD文件,使得定位段处有RAM。
2)调整存储器设置,使得RAM区有效。
引申:
补充概念:
cmd文件
用于DSP代码的定位。由于DSP的编译器的编译结果是未定位的,DSP没有操作系统来定位执行代码,每个客户设计的DSP系统的配置也不尽相同,因此需要用户自己定义代码的安装位置。
cmd文件由3部分组成:
1)输入/输出定义:.obj文件:链接器要链接的目标文件;.lib文件:链接器要链接的库文件;.map文件:链接器生成的交叉索引文件;.out文件:链接器生成的可执行代码;链接器选项
2)MEMORY命令:描述系统实际的硬件资源
3)SECTIONS命令:描述“段”如何定位
什么是CSL?
1,用于配置、控制和管理DSP片上外设
2,已为C6000和C5000系列DSP设计了各自的CSL库
3,CSL库函数大多数是用C语言编写的,并已对代码的大小和速度进行了优化
4,CSL库是可裁剪的:即只有被使用的CSL模块才会包含进应用程序中
5,CSL库是可扩展的:每个片上外设的API相互独立,增加新的API,对其他片上外设没有影响
为什么要设计CSL?
1,DSP片上外设种类及其应用日趋复杂
2,提供一组标准的方法用于访问和控制片上外设
3,免除用户编写配置和控制片上外设所必需的定义和代码
CSL的特点
1,片上外设编程的标准协议:定义一组标准的APIs:函数、数据类型、宏;
2,对硬件进行抽象,提取符号化的片上外设描述:定义一组宏,用于访问和建立寄存器及其域值
3,基本的资源管理:对多资源的片上外设进行管理;
4,已集成到DSP/BIOS中:通过图形用户接口GUI对CSL进行配置;
5,使片上外设容易使用:缩短开发时间,增加可移植.
boot loader
DSP的速度尽快,EPROM或flash的速度较慢,而DSP片内的RAM很快,片外的RAM也较快。为了使DSP充分发挥它的能力,必须将程序代码放在RAM中运行。为了方便的将代码从ROM中搬到RAM中,在不带flash的DSP中,TI在出厂时固化了一段程序,在上电后完成从ROM或外设将代码搬到用户指定的RAM中。此段程序称为“boot loader”。
初始化
DSP在RESET后,许多的寄存器的初值一般同用户的要求不一致,例如:等待寄存器,SP,中断定位寄存器等,需要通过初始化程序设置为用户要求的数值。 初始化程序的主要作用: 1)设置寄存器初值。 2)建立中断向量表。 3)外围部件初始化。