2010-12-07 69 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))