我正在使用的处理器架构有一个时间标记计数器,我想读出来进行性能测量。时间标签计数器是内存映射到 地址0x90000008。我使用以下例程来读取时间的值 tage counter,但打印输出的差异始终为零。任何人都有想法 我错过了什么?
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 :(得分:6)
我认为你不需要求助于汇编程序 - 为什么你不能只阅读:
uint32_t tbr = (*((uint32_t volatile *) 0x90000008))