2010-12-07 71 views
0

我正在使用的處理器體系結構有一個時間標記計數器,我想讀出來進行性能測量。時間標記計數器被存儲器映射到地址0x90000008的 。我使用下面的例程來讀取從 到tage計數器的值,但是打印輸出的差異總是爲零。任何人的想法 我失蹤了?從存儲器映射寄存器讀取

char* const ADDR = (char *) 0x90000008; 

unsigned long cycle_count_val() { 

    unsigned long res; 

    asm volatile (

    "set ADDR, %%l0   \n\t" 
    "ld [%%l0], %0   \n\t" 

    : "=r" (res) 
    : 
    : "%l0" 
); 

    return res; 
} 

.... 
unsigned long start = cycle_count_val(); 
execute_benchmark(); 
unsigned long end = cycle_count_val(); 

printf("Benchmark performance(in clock cycles) = %ld \r\n", end-start); 

非常感謝您的幫助, 菲爾

+0

你確定你的時間戳是`char`? – ruslik 2010-12-07 13:41:00

+0

不,它是32位存儲單元中的30位值(MSB爲0) – 2010-12-07 13:45:54

回答

6

我不認爲你需要求助於裝配臺 - 爲什麼你就不能讀取:

uint32_t tbr = (*((uint32_t volatile *) 0x90000008))