Measuringoursuccessisyoursuccess!
1
HELLODSP版权所有请勿用于商业用途违者必究
第3课CCS的常用操作
作者:顾卫钢
同学们,大家好,第3课终于姗姗来迟了,大家都等急了吧,实在不好意思。今天我们要一起来学习的是
CCS的一些常用操作,虽然只是一个课时的时间,但是通过本节课内容的学习,我相信您大概能够掌握用
CCS对DSP进行开发时所需要的一些必备的知识。中国有句古话叫“磨刀不误砍柴工”,如果您将CCS这把
常用的利刃磨锋利了,那么我相信为您的DSP开发过程节省不少的工夫。在上节课的学习过程中,其实大
家应该已经学会了如何配置CCSSetup,如何在CCS中打开一个工程,如何在工程中移除或者添加文件,如
何创建一个新的工程。那么这些作为您已经具有的知识,我们不再重复讲述了,下面将为您介绍在CCS中
如何编译程序,如何调试程序,如何统计代码执行的时间等内容。
今天所用到的工程“”在附件中,这个其实是CCS自带的一个例程,我们只是对其稍微做了些
修改。如果您目前还没有仿真器和开发板,那么只能做一些软仿真的工作,请将您的CCSSetup中的system
configuration栏内的MySystem设置成“F2812DeviceSimulator”。如果您已经有了硬件工具,那么您可以
根据各家公司相应的510仿真器的配置信息进行配置。
1.了解CCS的布局和结构
Measuringoursuccessisyoursuccess!
2
HELLODSP版权所有请勿用于商业用途违者必究
上节课已经为大家介绍过目前CCS的各个版本了,现有的资料中很少对CCS3.3版本进行介绍的,所以我们
今天主要针对CCS3.3给大家详细介绍,其他的版本您可以参看现有的一些资料,在我们网站上就有很多,
大家可以自行下载研究。首先让我们来了解一下CCS3.3打开时的界面,以及它的布局和结构。在上面的图
中我们可以通过各个工具栏或者窗口的名称就能大概知道这些工具或者区域的功能了。
菜单栏——和CCS所有功能相关的菜单都在这里面。
编译工具栏——编译程序时常用的一些工具。
调试工具栏——调试程序时常用的一些工具。
工程文件框——打开的工程所有文件会按类别放在这里,便于我们编程时在各个文件之间的切换。
代码编辑区——顾名思义,代码都是在这里编辑完成的了,是我们最主要的工作区域。
编译信息输出区——编译时产生的信息会在这个区域内输出,能让我们直观的了解到正在编译哪个文件,
编译过程中是否产生了错误,而这些错误是哪些,由于什么原因引起的,这些内容都会显示在这里。
在这里我觉得值得一提的是CC3.3和CCS2.2工具栏的区别,CCS2.2工具栏的图如下面所示,我们将其和
CCS3.3的工具栏比对之后发现CCS.2中的探针工具已经不在CCS3.3的工具栏中了,这是因为CCS3.3中的
断点就包含了先前版本的探针功能,如果您用的是CCS3.3,看的是低版本的CCS教程,那估计您会很郁闷,
怎么找也找不到探针工具,所以一定要在这里跟大家说一下。
2.开始调试程序
在开始这部分内容之前,请将附件中的volume1文件夹复制到MyProjects文件夹下,并打开CCS,打开
。通常您在写完程序之后做的第一步工作是什么呢?对的,就是要编译工程,看看我们所写的
代码是否具有语法错误,这是第一步,也是很关键的一步,如果语法都错了,那就无从谈起功能了。点击
编译工具栏的rebuildall按钮,开始编译工程。
编译之后,发现有错误,错误提示如下图所示。这是我们故意设置的一个错误,目的是来让大
家体验一下如何分析和修改提示的错误。这里,错误提示是在“Volume.c”文件的第43行需要一个“;”,
我们双击该条错误提示信息,光标会自动移到这个文件的第43行,我们发现代码是“asm("edis")”,确实
少了一个分号。我们添加“;”之后,保存一下,然后重新编译,错误就消失了。
希望大家能将平时学习或者开发过程中的错误提示信息以及您相应的解决方案记录下来,和大家共享一下,
我们会集中整理,以提供给后来的朋友参考。错误是很让人头疼的事情,而且千变万化,但是要是有一个
参考的方案,肯定会给遇到问题的朋友不少帮助。而常见的一些错误肯定都是类似的。
在编译完成之后,我们就要来下载程序并进行功能调试了。如果您是软件仿真,那直接点击“File”,”Load
Measuringoursuccessisyoursuccess!
3
HELLODSP版权所有请勿用于商业用途违者必究
Program”,打开对话框,在工程文件夹下面的Debug文件夹下,选中,点击打开,便开始下
载程序了。如果您是有仿真器和开发板了,并且将仿真器、开发板和电脑连接好了,此时去点击File菜单,
发现LoadProgram选项是灰色的,也就是说没办法下载程序,这是怎么回事呢。这又是CCS3.3版本和CCS2.2
版本的区别了。我们先看一下CCS的最左下角,会发现提示信息是:Disconnected,如下图所示,也就是
说仿真器没有成功将CCS和目标板连接起来。
请点击菜单栏中的“Debug”,“Connect”,我们会发现刚才左下角的提示信息已经改了。仿真器已经完成
将CCS和目标板上的DSP连接起来。这时候,我们再去看菜单栏中的“File”菜单,其中的“Loadprogram”
已经变成可用了,然后根据上面和软仿真一样的方法,将文件下载到目标板上2812的RAM
中。注意,这里是调试,所以将程序下载到RAM。等到最后您要固化程序的时候,就得下载到FLASH了,
因为断电之后,RAM里面所有的数据都会消失。如何烧写FLASH,在以后的学习中会涉及到。
软仿真的时候可能不会出现问题,但是在用仿真器下载程序的时候我这跳出了下面的问题,因为也是常见
问题所以把它列出来:
这个错误提示是数据校验错误在地址0x3FFC0,请核对存储映射文件。不同的硬件环境可能问题会不一样,
我们就以这个为例。我们检查一下我们的CMD文件,发现有这么一行代码:
PAGE0:RESET(R):origin=0x3fffc0,length=0x2
0x3fffc0正好是这一部分内容的起始地址,肯能这段地址有问题或者咋了,不是很清楚,那就修改一下这
个起始地址看看,将其改为0x3ffc2,编译下载后还是有问题,索性将其改为0x3ffff,跳过一段,编译下载,
OK了!
老激动了,咱终于可以在2812上跑程序了。下面我们来了解一下这几个按钮,以便于下面操作:
Run,就是跑的意思,按一下这个按钮,程序就开始运行了。
Halt,暂停、停止、终止的意思,按一下这个按钮,程序就停下来了。
Animate,激励的意思,从图上我们也能看到,这个小人充满了能量在飞快的奔跑。
Run和Animate的区别,我的理解是Run是整常的跑,如果遇到断点,即障碍的话它就停下来了。而Animate
是在充满能量的飞奔,啥也阻挡不了它,所以就算有断点,它照常跑,这些障碍它是不放在眼里的。
在程序没有运行之前,Halt按钮是灰色的。好了,赶紧按一下Run按钮,让程序跑起来吧,这是Halt就高
亮可用了。这时,我们可以看见在CCS下方的信息输出区域显示了“hellodsp!”这个程序的具体内容我们
不做研究,只是用来作为学习CCS操作的一个工具而已。如果想让程序停止,那按一下Halt按钮,程序就
Measuringoursuccessisyoursuccess!
4
HELLODSP版权所有请勿用于商业用途违者必究
嘎然而止了,停下来的那行代码前会有一个黄色的小箭头。
接下来,向大家介绍调试代码时常用的一些操作。
(1)如何添加断点
我们调试代码时有时候想看看某一行或者某几行代码是否有执行,或者想看看执行前后变量的一些变化,
那么我们就需要在这行或者这几行代码前加上断点了。加上断点的方法很简单,只要在该行代码前双击就
行。双击之后,这行代码前面会出现一个红色圆块。另外一种添加断点的方法,就是在刚才的编译工具栏
上,点一下那个小手图形的按钮,前天是你要把光标移动到想要设置断点的哪一行上。我还是推荐大家使
用第一种方法,简便。这时运行Run按钮,程序就会在断点处停下,黄色的小箭头又出现了。
那如何取消断点呢,在刚刚设置断点的那行再双击一下,代表断点的红色标记就消失了,断点也就被取消
了。如果想要清除文件内的所有断点,那么我们可以按一下刚才小手按钮旁边的那个打了叉叉的小手按钮
“Debug:Removeallbreakpoints”。
(2)如何单步调试
让我们来了解一下CCS给我们提供的调试工具吧。调试工具栏上分两类,一类是用于在源代码中调试的,
另一类是用于在汇编代码中调试的。
Source-singlestep就是源代码单步调试了,这个很好理解,就是按一下,走一步的模式。
Source-stepover这个按钮是指在单步执行时,如果在函数内遇到子函数,那么不会进入子函数内单步
执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。
Source-stepout当单步执行到子函数内时,用stepout就可以执行完子函数余下部分,并返回到上
一层函数。
用于汇编调试的两个工具Asmbly-singlestep和Asmbly-stepover含义和上面源文件调试的两个类似,
就不再重复叙述了。理解这些工具,对于我们正确快速的调试代码会带来很好的帮助。
(3)如何使用watchwindow
Watchwindow的作用是来观察程序运行过程中的各个变量的值。调用watchwindow的方法是点击菜单栏
的”View”,”watchwindow”,这时watchwindow就会显示在CCS下方的信息区域,如下图所示:
如果我是想观察某个特定的变量,那怎么操作呢。也很简单,我们只要在代码中选中这个变量,然后右键
“Addtowatchwindow”,这个变量就会显示在watchwindow中。我们可以看到,str是一个结构体变量,
当点击其前面的加号时,就能将该变量展开,其各个成员变量的值也会被一并列出。这也是通过watch
window来查看结构体中各个变量的方法。
本页已使用福昕阅读器进行编辑。
福昕软件(C)2005-2009,版权所有,
仅供试用。
Measuringoursuccessisyoursuccess!
5
HELLODSP版权所有请勿用于商业用途违者必究
(4)其他一些操作
我们在调试程序的时候经常想让程序从Main函数开使运行,那怎么定位呢?我们点击菜单栏中
的”Debug”,”Gomain”就可以了。
我们会想要是调试的时候将源文件和汇编文件放在一起那就好了,因为我们既能看到源文件中代码的执行
情况,又能看到汇编指令的执行情况,这样方便多了。CCS也给我们设计了这一个功能,点击菜单栏中的
“View”,“MixedSource/Asm”就能实现了。
我们看到,每一行源代码下面就会有相应的汇编代码,黄色的指针指示源代码,绿色的指针指示汇编代码。
如果要取消源代码和汇编代码在一个文件内的话,重复刚才的操作就可以了。
3.统计代码运行时间
接下来我们来学习在CCS3.3中如何统计代码的运行时间,这是很有趣的一部分内容。首先,我们将代码的
阅览模式设置成前面的源码和汇编同时显示的模式。
Measuringoursuccessisyoursuccess!
6
HELLODSP版权所有请勿用于商业用途违者必究
然后,点击菜单栏中的“Profile”“Clock””Enable”,来使能CLOCK功能。接下来点击“Profile”“Clock”“View”,
在CCS最下面会出现一个类似于秒表的工具,旁边显示数字“0”。
我们关注main函数这一块,在代码“int*input=&inp_buffer[0];”前面设置断点,然后点击Run,这样程
序就会停在这一行代码前面,而且黄色指针指示源码,绿色指针指向汇编。
这时,我们会发现,底下的CLOCK工具开始显示数字啦,显示的是753,当然不同的环境显示的数字应该
是不一样的。这应该就是从开始执行到这一语句所花的时间了,那753的单位是什么呢?不会是s吧,一
想肯定不是,这753的单位是“CPUCycles”,CPU的时钟周期。
我们来统计一下汇编指令的执行时间吧,点击一下Asmbly-singlestep。汇编指令下移一行,CLOCK工具
显示754,也就是刚才这句代码执行了1个CC。那如何统计执行一段代码所花的时间呢,在需要统计的那
段代码开始和结束的地方分别设置断点,如下图所示。
Measuringoursuccessisyoursuccess!
7
HELLODSP版权所有请勿用于商业用途违者必究
将两个地方的CLOCK工具显示的值相减就能得到这一段代码的执行时间了。怎么样,是不是很有趣?
通过今天的学习,我们掌握了使用CCS开发DSP的一些常用操作,这是最最基本的,如果我们想要学会更
加高级的一些功能,那么我们只有好好专研TI提供的CCS文档,并且反复尝试琢磨了。今天布置给大家的
题目是如何使用CCS3.3来显示图表?希望有会的同学能出来讲讲,也希望大家能够将自己使用CCS的一些
技巧拿出来和大家分享。
本文发布于:2022-12-03 19:53:23,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/46364.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |