好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

程序调试及错误观察cc进阶教程.ppt

36页
  • 卖家[上传人]:san****019
  • 文档编号:71429848
  • 上传时间:2019-01-20
  • 文档格式:PPT
  • 文档大小:922.31KB
  • / 36 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第十讲 程序调试及错误观察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栏中表达式图标 ,键入要观察的变量 名dataIO10、单击观察窗口中的白色区域,保存更改 这个值将立即出现在下面的例子中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栏中的表达式图标 ,键入要观察表达式名称str3、单击观察窗口中的白色空间,保存更改 数值将立即出现在下面的例子中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,单击Open2、双击Project View中的 volume.c 3、将光标放到主程序中 dataIO();,4、单击 (Toggle Probe Point) 选择空白区域指示探针已经设置(兰色图标),如果废止 选择区,此行为兰色显亮5、从File菜单,选择File I/O 出现File I/O对话框,因此可以选择输入输出文件6、在File Input,单击Add File7、浏览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 Point14、单击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 0\n'); %输出文件头,文件头必须是dsp所能识别的,就如此句程序所设定的 fprintf(fid,'0x%x\n',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 0\n'); %输出文件头,只有此文件头dsp芯片才能识别 fprintf(fid,'0x%x\n',round(x)); %输出十六进制的x fclose(fid); %关闭,这里x要转换成二进制补码,其在CCS中的使用方法可以有一下命令: File-Data-Load File-Data-Store File-File I/O,(4)显示图形,在这个例子中,可以查看关于时间的信号图形1、选择View/Graph/ Time/Frequency2、在 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 Display5、再次选择View/Graph/ Time/Frequency6、这次更改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=Run—halt — 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:指令周期,单位为nsPipeline Adjustments:流水线调整花费周期数当遇到断点或暂停CPU执行时,CPU必须刷新流水线,耗费一定的CPU周期数设置此参数可以获得较好的测量精度为了避免测量精度的降低,应尽量减少暂停CPU的次数和设置断点的个数 Reset Option:CLK的清0方式选择自动,CLK会在运行目标程序前自动清0,否则将不断累加直到双击时钟窗口将其清0剖析时钟使用示例,,GEL=General Extension Language 一种类似C的解释型语言,可实现循环等程序结构 提供基本的程序控制命令,类似以。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.