C6748内部有一个专门用于计数的计数器。
方法一:
在要测的代码前后设置两个断点,然后点击:Run—Clock—Enable.在CCS左下方的状态栏将出现一个时钟标记,该时钟标记即为代码执行的时钟周期(双击该时钟标记可以清零该时钟)。C6748的CPU为456MHZ,则为:时钟周期X1/456 (us)。
方法二:代码中得到时钟周期
利用寄存器中的计数器,
①位于Core Register中的TSCL和TSCH(两个64位计数器,只读)。计数频率与CPU同频
测量方式是在代码执行前读取TSCL和TSCH寄存器的值,执行后再读取TSCL和TSCH寄存器的值,则两次的差值则为代码周期。
cregister TSL; //由于TSCL和TSCH是位于CPU核心内部,没有被映射到统一的内存编址上,对他的访问不能通过内存地址的方式,可创建关键字的方式,注意关键字的名字必须和寄存器一样。 //或直接添加头文件<C6x.h>,该头文件中已经定义好了 #include <c6x.h> //在要测量的代码所在的函数中,添加以下函数 unsigned int beforeL,beforeH; unsigned int afterL,afterH; TSCL = 0; TSCH = 0; beforeL = TSCL; //这里为要测量的代码 //**************** afterL = TSCL; printf("%d\n",afterL-beforeL); //将时间打印出
当时钟周期较长,需要用到两个计数器时,则会用到c6x.h中的 long long _itoll(unsigned, unsigned)-将两个整形的数合并成long long长整形的数。
cregister TSL; //由于TSCL和TSCH是位于CPU核心内部,没有被映射到统一的内存编址上,对他的访问不能通过内存地址的方式,可创建关键字的方式,注意关键字的名字必须和寄存器一样。 //或直接添加头文件<C6x.h>,该头文件中已经定义好了 #include <c6x.h> //在要测量的代码所在的函数中,添加以下函数 unsigned int ,beforeL,beforeH; unsigned int after,afterL,afterH; long long before; long long after; TSCL = 0; TSCH = 0; beforeL = TSCL; beforeH = TSCH; before = _itoll(beforeH, beforeL) //这里为要测量的代码 //**************** afterL = TSCL; afterH = TSCH; after = _itoll( afterH, afterL) printf("%d\n",after-before); //将时间打印出
当然,严谨的说,代码中的赋值语句也会占用一定的时钟周期,则会有误差。因此,可以额外加一个变量去测量这几个赋值语句所占用的时钟周期,然后在之前得到的时钟周期中去除即可。
②位于PLL0和PLL1中的EMUCNT0和EMUCNT1(两个64位计数器,只读 ),与相应的PLL锁相环频率有关。