在单片机开发中,通常需要精确估算代码运行时间,用于对算法优化以及对项目平台选择提供参考,通常算法如果用汇编编写,可以人工计算出运行时间,用C语言编写也可以通过反汇编代码而计算到较为精确的运行时间,但当程序中出现很多函数的调用,以及程序嵌套是,使用人工计算程序运行时间则比较费时费力。在CCS中可以对程序运行时间进行测量。CCS官方给出了两种测试代码运行时间的办法,有兴趣的可以阅读一下官方文档原文
1、Profile clock in CCS(此方法适用于非Stellaris系列,因为我的Stellaris用这种方法不行,我也就不说了,自己看看文档,很简单)
2、Watchpoints for Stellaris in CCS(此方法理论上使用TI所有单片机(包括Stellaris),我只测试了Stellaris,其他系列入MSP430有兴趣的可以自己试试。我讲的也是这种方法)
步骤:
1、现将程序编译并Debug下载到开发板。然后点击Window->Show View->Breakpoints
![](https://i-blog.csdnimg.cn/blog_migrate/fc5e1652664c9cabadca3284bd583442.jpeg)
打开断点窗口
然后在右上角(默认设置)窗口中会多出一个断点窗口(默认有这个窗口可以跳过第一步)
![](https://i-blog.csdnimg.cn/blog_migrate/7ce7d77dbb9200c2694db7abc433b772.jpeg)
2、点击断点下拉框选择Count Event
![](https://i-blog.csdnimg.cn/blog_migrate/e854dae0e74e664436dbcf52b2b8d58e.jpeg)
下拉框
弹出提示框后选择Clock Cycles,然后点击OK
![](https://i-blog.csdnimg.cn/blog_migrate/8ef011f88585587fefbd622e22465e63.jpeg)
点击OK
3、经过第二部后在读断点窗口中会多出一个Count Event断点,在Count Event上鼠标点击右键选择Breakpoint Properties对此断点进行配置。
![](https://i-blog.csdnimg.cn/blog_migrate/b0010c474973b4ccdad7829e11e36d2e.jpeg)
右击断点
将Reset Count on Run改为true,点击OK保存。
![](https://i-blog.csdnimg.cn/blog_migrate/5ed58dcc9c0d23cb6fab4c2e43328f76.jpeg)
修改配置
4、将要测试的代码代码加上断点,如图,假如我要测试程序从1到2需要运行对少时间,则将1所在的行设置断点同时把2设置断点,此时可以看到断点窗口多了两个断点。(注:此时Count Event显示67941表示程序运行到main函数是已经运行了67941个时钟周期(启动代码消耗),刚加进来Count Event是的计数值很大,那个值不准,重新Debug程序到开发板时因为之前已经添加了Count Event,所以计数是准的)
![](https://i-blog.csdnimg.cn/blog_migrate/7347c3d88d7033fd236af13cf0273d50.jpeg)
添加断点
5、单击运行按钮当程序运行到第一个断点时Count Event数值变为93210,说明从main函数运行到这一代码之前一条代码(断点处代码在程序暂停时还没有运行)用了93210个时钟周期,这个始终中期不包括之前启动代码运行消耗的67941个时钟周期,因为之前设置了Reset Count on Run为True,所以每一次点击运行按钮这个值都会清零。
![](https://i-blog.csdnimg.cn/blog_migrate/8ae3d975d14096497ed9caef863b7170.jpeg)
运行1
在此点击运行按钮,当程序运行到2处时自动暂停运行,此时看到count event 变为了229938,说明程序从1运行到2用了229938个时钟周期。
![](https://i-blog.csdnimg.cn/blog_migrate/45823658fa8829a14cdd4f2dc2de4b9f.jpeg)
6、运行时间计算
由第5步知道从代码1到代码2用了229938个机器中期,假如我设置看法板时钟频率为40Mhz,那这段代码运行时间就是229938 * (1/(40*1000000)=0.00574845,约为5.75MS