程序调试及错误观察CC进阶教程.ppt_第1页
程序调试及错误观察CC进阶教程.ppt_第2页
程序调试及错误观察CC进阶教程.ppt_第3页
程序调试及错误观察CC进阶教程.ppt_第4页
程序调试及错误观察CC进阶教程.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

第十讲程序调试及错误观察CC进阶,(1)使用断点(Breakpoints)和观察窗口(WatchWindow),程序执行时常常需要检查变量的值,1、File/ReloadProgram.,2、双击ProjectView窗中的volume.c(源文件)。可以将窗口变大,看到更多的源代码。,3、将光标放在dataIO();,4、单击(ToggleBreakpoint)工具条,或按F9。选择空白区指示断点已经设置(红色图标)。,5选择View/WatchWindow,在CCS窗口的右下角出现单个区域,同时,这个区域显示观察变量的值。,6、如果不在主程序,选择Debug/GoMain.,7选择Debug/Run,或按F5,或按图标。,8、选择Watch1,9单击Name栏中表达式图标,键入要观察的变量名dataIO。,10、单击观察窗口中的白色区域,保存更改。这个值将立即出现在下面的例子中。,11、单击(StepOver)或按F10,跨过对dataIO()的调用。,StepInto(F8)StepOver(F10)StepOut(ShiftF7)RuntoCursor(CtrlF10),12、完成后,单击(RemoveAllBreakpoints),再继续下面的学习。,(2)使用带结构的WatchWindow,除了观察简单变量的值,也可以观察一个结构的元素的值。,1、选择Watch1,2、单击Name栏中的表达式图标,键入要观察表达式名称str。,3、单击观察窗口中的白色空间,保存更改。数值将立即出现在下面的例子中。,4、从ReviewingtheSourceCode调出volume.c中全局申明、并初始化的类型为PARMS的结构。volume.h定义了PARMS的结构类型,5、单击str上的+号,CCS将结构中所有元素和元素值。,双击结构中元素的Value,编辑元素的值。,6、在Watchwindow中Value栏,更改变量的值。注意,WatchWindow中数值的更改,数值也变为红色,表示已经手动修改。,7、选择WatchWindow中str变量,按Delete键。其他变量同理。,8、选择Debug/Breakpoints.在Breakpoints中,单击DeleteAll,然后单击OK.,(3)添加探针ProbePoint(为了文件I/O),可以添加探针(ProbePoint),从PC机中的文件读数据。,按照下面的步骤使用探针:,从主PC中传递输入数据,到算法所使用的目标的缓冲器中;,从目标的缓冲器中传递输出数据,到主PC中;,用数据修改窗口。,探针与断点的相同之处是它们都可以停止程序的运行,不同之处有如下几点:(1)探针只是暂时中断程序的运行,当程序执行到探点时会自动更新与之相连接的窗口,然后自动继续运行程序。(2)断点中断程序后,将更新所有打开的窗口,且只能通过人工干预的方法恢复程序继续运行。(3)探针运行时,文件能够自动完成从PC机和目标处理器之间的输入、输出,而断点没有此功能。,下面将学习如何使用ProbePoint,将PC文件中的内容,作为测试数据,传递到目标DSP中。另外,也可以使用断点修改所有打开的窗口。,1、选择File/LoadProgram,选中volume1.out,单击Open。,2、双击ProjectView中的volume.c。,3、将光标放到主程序中dataIO();,4、单击(ToggleProbePoint)。选择空白区域指示探针已经设置(兰色图标),如果废止选择区,此行为兰色显亮。,5、从File菜单,选择FileI/O。出现FileI/O对话框,因此可以选择输入输出文件。,6、在FileInput,单击AddFile。,7、浏览volume1工程文件夹,选中sine.dat,单击Open。sine.dat文件是正弦波的十六进制数值,出现sine.dat文件的控制窗口。再后,当运行程序时,可以在数据文件中使用此窗口启动、停止、返回、或快进。,8、在FileI/O对话框,更改Address为inp_buffer,Length为100,在WrapAround中可以添加选中符号。,Address指定从文件中来的数据将放在什么地方。volume.c申明inp_buffer为整数矩阵BUFSIZE(volume.h中定义为常量),Length指定每次使用ProbePoint时从数据文件中读多少样本。这里取100,因为volume.h设置常量为BUFSIZE(0 x64)。,WrapAround选择引起当其到达文件末尾时,CCS开始从文件开始读。这允许数据文件被看作为连续的数据流。,9、单击AddProbePoint。出现Break/ProbePoints对话框中的ProbePoints,10、在ProbePoint列表中,显亮行为:VOLUME.Cline61-NoConnection.,11、在ConnectTo区域中,单击下箭头,从列表中选中sine.dat,12、单击Replace。ProbePoint列表改向显示这个ProbePoint连接到sine.dat文件。,13、单击OK。FileI/O对话框显示文件现在连接到ProbePoint。,14、单击OK,关闭FileI/O对话框。,CCS支持的.dat文件的格式为:定数数据格式起始地址页类型数据块大小,定数固定为“1651”,数据格式可以选择“1”(十六进制整型)、“2”(十进制整型)、“3”(十进制长整型)、“4”(十进制浮点型)。起始地址为存储的地址,页类型标示为程序或者数据,1为数据2为程序。,比如一个.dat文件:165118001100 x00000 x00000 x00000 x00000 x00000 x00000 x00000 x00000 x00000 x00000 x00000 x00000 x0000,制作.dat文件的方法也很简单,可以用VC+或者MATLAB来实现。,matlab向dsp传递.dat文件x=2*sin(2*pi*100*m*dt);M*i+m0form=1:200;ifx(m)=0y(m)=x(m);elsey(m)=4+x(m);end;end;y=y*16384;fid=fopen(input.dat,w);%打开文件,w是将此文件定义为可写的,fid是此文件的整数标示fprintf(fid,16511010n);%输出文件头,文件头必须是dsp所能识别的,就如此句程序所设定的fprintf(fid,0 x%xn,round(y);%输出y数组,并写到与fid标示符相同的文件,即yinput.dat文件里。round是取y值的最近的数,即如果是1.2,就取1,如果1.6,就取2.fclose(fid);%关闭fid标示符的文件。fid=fopen(input.dat,w);%打开文件,属性设置为写fprintf(fid,16511010n);%输出文件头,只有此文件头dsp芯片才能识别fprintf(fid,0 x%xn,round(x);%输出十六进制的xfclose(fid);%关闭,这里x要转换成二进制补码,其在CCS中的使用方法可以有一下命令:File-Data-LoadFile-Data-StoreFile-FileI/O,(4)显示图形,在这个例子中,可以查看关于时间的信号图形。,1、选择View/Graph/Time/Frequency。,2、在GraphPropertyDialog对话框,更改GraphTitle,StartAddress,AcquisitionBufferSize,DisplayDataSize,DSPDataType,Autoscale,和MaximumY-value属性,下拉或重新拉大对话框,查看所有属性。,3、单击OK。出现InputBuffer的Input图形窗口。,4、右击Inputgraph窗口,从下拉菜单中选择ClearDisplay。,5、再次选择View/Graph/Time/Frequency。,6、这次更改GraphTitle为Output,StartAddress为out_buffer,所有其他设置都正确。,7、单击OK,显示输出图形Outputgraph窗口,右击Outputgraph窗口,从下拉菜单中选择ClearDisplay。,激活程序和图形,至此,已经放置断点,传递主PC中的数据,到目标DSP;可暂停目标DSP,或继续目标DSP应用程序。但是,ProbePoint不修改图形。本节建立断点(breakpoint),修改图形,使用Animate命令,遇到断点后继续自动执行。,1、在volume.c窗口,将光标放在调用dataIO的行上。,2、单击(ToggleBreakpoint),或按F9,选中空白区域放置红色图标,代表断点。,将断点breakpoin和探测点ProbePoint放在同一行,这样传递数据和修改图形时目标只须暂停一次。,3、调整窗口,使得两个窗口都可以看见。,5、每遇到探测点ProbePoint一次,CCS就从sine.dat文件获得100个数值,并将它们写入inp_buffer地址。,4、单击(Animate),或按F12运行程序。Animate=Runhaltcontinue,增益Gain=1,注意:DSP在探测点暂停。CCS遇到探测点时,暂停目标。因此,如果使用探测点,不能保证实时性。这一阶段开发,你可以检测算法,然后可以使用RTDX和DSP/BIOS分析实时特性。,6、选择Debug/Halt,退出程序运行。,剖析(Profile)在CCS中可以统计某段代码的执行时间。代码剖析不仅可以迅速地评估程序的性能以便优化代码,还可以统计其它的处理器事件,如执行跳转的次数、子程序调用的次数和中断次数等。,剖析时钟(ProfileClock)使用剖析时钟测量代码执行时间的方法如下:(1)首先允许时钟,选择菜单Profile-EnableClock。(2)选择菜单Profile-ViewClock打开时钟窗口。(3)假定要测量A、B两条指令间的执行时间,那么在B至少4条指令的C处设置断点。(4)在A处设置断点并运行到该处,双击时钟窗口使其清0,之后清除A断点。(5)运行到C处并记下当前的CLK值,该值为A、C之间程序的运行时间T1。(6)用同样的方法测量B、C间的运行时间T2,T1-T2即为断点A、B之间的执行时间。用这种方法可以避免由于设置断点而引起的测量误差。,Count:计数单位。InstructionCycleTime:指令周期,单位为ns。,PipelineAdjustments:流水线调整花费周期数。当遇到断点或暂停CPU执行时,CPU必须刷新流水线,耗费一定的CPU周期数。设置此参数可以获得较好的测量精度。为了避免测量精度的降低,应尽量减少暂停CPU的次数和设置断点的个数。ResetOption:CLK的清0方式。选择自动,CLK会在运行目标程序前自动清0,否则将不断累加直到双击时钟窗口将其清0。,剖析时钟使用示例,GELGeneralExtensionLanguage一种类似C的解释型语言,可实现循环等程序结构提供基本的程序控制命令,类似以前emulator提供的命令,GEL_Go(),GEL_Reset()等等可以制作菜单(可以加入到CCS主菜单),对话框,滑动条,调整增益Gain,处理函数将输入缓冲器中的每个值乘以增益,并将结果放在输出缓冲器。在while循环中执行下面的语句。,1.*output+=*input+*gain;,这个语句将inp_buffer中的数值乘以增益,并结果放在out_buffer中相映的位置。增益初始化设置在MINGAIN上,定义在头文件volume.h中。如果修改输出,则需要修改增益。办法之一是,使用观察变量:,1、选择View/WatchWindow,选中Watch1。,2、单击Name栏中的表达式图标,键入gain,作为观察的变量。,3、单击观察窗

温馨提示

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

评论

0/150

提交评论