C6748_代码执行周期_软件测量


  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中的EMUCNT0EMUCNT1(两个64位计数器,只读 ),与相应的PLL锁相环频率有关。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM