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