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

下载本文档

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

文档简介

第十讲 程序调试及错误观察CC进阶 (1)使用断点(Breakpoints)和观察窗口(Watch Window) 程序执行时常常需要检查变量的值 1、File/Reload Program. 2、双击Project View 窗中的volume.c(源文件)。 可以将窗口变大,看到更多的源代码。 3、将光标放在 dataIO( ); 4、单击 (Toggle Breakpoint)工具条,或按F9。 选择空白区指示 断点已经设置(红色图标)。 5选择View/Watch Window,在CCS窗口的右下角出现 单个区域,同时,这个区域显示观察变量的值。 6、如果不在主程序,选择Debug/Go Main. 7选择Debug/Run,或按F5,或按图标 。 8、 选择Watch1 9 单击Name栏中表达式图标 ,键入要观察的变量 名dataIO。 10、单击观察窗口中的白色区域,保存更改。 这个值将立即出现在下面的例子中。 11 、单击 (Step Over)或按F10,跨过对dataIO()的调用。 Step Into (F8) Step Over (F10) Step Out (Shift F7) Run to Cursor (Ctrl F10) 12、完成后,单击 (Remove All Breakpoints),再继续下面的学习。 (2)使用带结构的Watch Window 除了观察简单变量的值,也可以观察一个结构的元素的值。 1、选择Watch1 2、单击单击 Name栏中的表达式图标 ,键入要观察表达式名称str。 3、单击观察窗口中的白色空间,保存更改。 数值将立即出现在下面的例子中。 4、从Reviewing the Source Code调出 volume.c中全局申明 、 并初始化的类型为PARMS的结构。 volume.h定义了PARMS的结构类型5、单击str上的+号,CCS将结构中所有元素和元素值。 双击结构中元素的Value,编辑元素的值。 6、在Watch window 中Value栏,更改变量的值。 注意,Watch Window中数值的更改,数值也变为红色, 表示已经手动修改。 7、选择Watch Window 中str变量,按Delete 键。其他变量同理。 8、选择Debug/Breakpoints. 在Breakpoints中,单击Delete All, 然后单击OK. (3)添加探针Probe Point (为了文件I/O) 可以添加探针(Probe Point),从PC机中的文件读数据。 按照下面的步骤 使用探针: 从主PC中传递输入数据,到算法所使用的目标的缓冲器中; 从目标的缓冲器中传递输出数据,到主PC中; 用数据修改窗口。 探针与断点的相同之处是它们都可以停止程序的运行,不 同之处有如下几点: (1)探针只是暂时中断程序的运行,当程序执行到探 点时会自动更新与之相连接的窗口,然后自动继续 运行程序。 (2)断点中断程序后,将更新所有打开的窗口,且只 能通过人工干预的方法恢复程序继续运行。 (3)探针运行时,文件能够自动完成从PC机和目标 处理器之间的输入、输出,而断点没有此功能。 下面将学习如何使用Probe Point ,将PC文件中的内容,作为 测试数据,传递到目标DSP中。 另外,也可以使用断点修改所有打开的窗口。 1、选择File/Load Program,选中volume1.out,单击Open。 2、双击Project View中的 volume.c 。 3、将光标放到主程序中 dataIO(); 4、单击 (Toggle Probe Point)。 选择空白区域指示探针已经设置(兰色图标),如果废止 选择区,此行为兰色显亮。 5、从File菜单单,选择选择 File I/O。 出现File I/O对话框,因此可以选择输 入输出文件。 6、在File Input,单击Add File。 7、浏览volume1工程文件夹,选中sine.dat,单击Open。 sine.dat 文件是正弦波的十六进制数值 出现sine.dat文件的控制窗口。再后,当运行程序时,可以在 数据文件中使用此窗口启动、停止、返回、或快进。 8、在File I/O对话框,更改Address 为inp_buffer,Length为100, 在Wrap Around中可以添加选中符号。 Address指定从文件中来的数据将放在什么地方。 volume.c申明 inp_buffer为整数矩阵BUFSIZE(volume.h中定义为常量) Length指定每次使用Probe Point 时从数据文件中读多少样本。 这里取100,因为volume.h 设置常量为BUFSIZE (0x64)。 Wrap Around选择引起当其到达文件末尾时,CCS开始从文件开始 读。 这允许数据文件被看作为连续 的数据流。 9、单击Add Probe Point。 出现 Break/Probe Points对话框中的 Probe Points 10、在 Probe Point列表中,显亮行为: VOLUME.C line 61 No Connection. 11、在Connect To区域中, 单击下箭头,从列表中 选中 sine.dat 12、单击 Replace。 Probe Point列表改向显示这个Probe Point连接 到sine.dat文件。 13、单击OK。 File I/O 对话框显示文件现在连接到Probe Point。 14、单击OK,关闭File I/O对话框。 CCS支持的.dat文件的格式为: 定数 数据格式 起始地址 页类型 数据块大小 定数固定为“1651”, 数据格式可以选择“1”(十六进制整型)、“2”(十进 制整型)、“3”(十进制长整型)、“4”(十进制浮点 型)。 起始地址为存储的地址, 页类型标示为程序或者数据,1为数据 2为程序。 比如一个.dat文件: 1651 1 800 1 10 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 制作.dat 文件的方法也很简单,可以 用VC+或者MATLAB来实现。 matlab向dsp传递.dat文件 x=2*sin(2*pi*100*m*dt); M*i+m0for m=1:200; if x(m)=0 y(m)=x(m); else y(m)=4+x(m); end; end; y=y*16384; fid=fopen(input.dat,w); %打开文件,w是将此文件定义为可写的,fid是 此文件的整数标示 fprintf(fid,1651 1 0 1 0n); %输出文件头,文件头必须是dsp所能识别的, 就如此句程序所设定的 fprintf(fid,0x%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,1651 1 0 1 0n); %输出文件头,只有此文件头dsp芯片才能识别 fprintf(fid,0x%xn,round(x); %输出十六进制的x fclose(fid); %关闭 这里x要转换成二进制补码 其在CCS中的使用方法可以有一下命令 : File-Data-Load File-Data-Store File-File I/O (4)显示图形 在这个例子中,可以查看关于时间的信号图形。 1、选择View/Graph/ Time/Frequency。 2、在 Graph Property Dialog对话框,更改Graph Title, Start Address, Acquisition Buffer Size, Display Data Size, DSP Data Type, Autoscale, 和 Maximum Y-value属性,下拉或重新拉大对话框,查看所有属性。 3、单击OK。 出现Input Buffer的Input图形窗口。 4、右击Input graph窗口,从下拉菜单中选择Clear Display。 5、再次选择View/Graph/ Time/Frequency。 6、这次更改Graph Title为Output,Start Address 为 out_buffer,所有其他设置都正确。 7、单击OK,显示输出图形Output graph窗口,右击 Output graph 窗口,从下拉菜单中选择Clear Display。 激活程序和图形 至此,已经放置断点,传递主 PC中的数据,到目标DSP; 可暂停目标DSP,或继续目标DSP 应用程序。但是,Probe Point 不修改图形。本节建立断点 (breakpoint),修改图形,使用 Animate命令,遇到断点后继续自动执行。 1、 在volume.c窗口,将光标放在调用dataIO的行上。 2、单击 (Toggle Breakpoint),或按F9,选中空白区域 放置红色图标,代表断点。 将断点breakpoin和探测点Probe Point放在同一行, 这样传递数据和修改图形时目标只须暂停一次。 3、调整窗口,使得两个窗口都可以看见。 5、每遇到探测点Probe Point一次,CCS就从sine.dat文件 获得100个数值,并将它们写入inp_buffer地址。 4、单击 (Animate),或按F12运行程序。 Animate=Runhalt continue 增益 Gain=1 注意: DSP 在探测点暂停。CCS遇到探测点时,暂停目标。 因此,如果使用探测点,不能保证实时性。 这一阶段开发,你可以检测算法,然后可以使用RTDX 和DSP/BIOS分析实时特性。 6、选择Debug/Halt,退出程序运行。 剖析(Profile) 在CCS中可以统计某段代码的执行时间。代码剖析不 仅可以迅速地评估程序的性能以便优化代码,还可以 统计其它的处理器事件,如执行跳转的次数、子程序 调用的次数和中断次数等。 剖析时钟(Profile Clock) 使用剖析时钟测量代码执行时间的方法如下: (1)首先允许时钟,选择菜单Profile-Enable Clock。 (2)选择菜单Profile-View Clock打开时钟窗口。 (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:计数单位。 Instruction Cycle Time:指令周期,单位为ns。 Pipeline Adjustments:流水线调整花费周期数。当遇到断点 或暂停CPU执行时,CPU必须刷新流水线,耗费一定的CPU周 期数。设置此参数可以获得较好的测量精度。为了避免测量精 度的降低,应尽量减少暂停CPU的次数和设置断点的个数。 Reset Option:CLK的清0方式。选择自动,CLK会在运行目 标程序前自动清0,否则将不断累加直到双击时钟窗口将其清0 。 剖析时钟使用示例 GELGeneral Extension Language 一种类似C的解释型语言,可实现循环等程序结 构 提供基本的程序控制命令,类似以前emulator提 供的命令,GEL_Go(), GEL_Reset() 等等 可以制作菜单(可以加入到CCS主菜单),对话 框,滑动条 调整增益Gain 处理函数将输入缓冲器中的每个值乘以增益,并将结果放在 输出缓冲器。在while循环中执行下面的语句。 1.*output+ = *input+ * gain; 这个语句将inp_buffer中的数值乘以增益,并结果放在out_buffer 中相映的位置。增益初始化设置在MINGAIN上,定义在头文件 volume.h中。如果修改输出,则需要修改增益。 办法之一是,使用观察变量: 1、选择View/Watch Window,选中Watch1 。 2、单击Name栏中的表达式图标 ,键入gain ,作为观察的变量。 3、

温馨提示

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

评论

0/150

提交评论