C++ 从内存映射寄存器读取

C++ 从内存映射寄存器读取,c++,c,benchmarking,performancecounter,C++,C,Benchmarking,Performancecounter,我正在使用的处理器架构有一个时间标签计数器,我想读出它来进行性能测量。时间标签计数器被内存映射到 地址0x9000008。我使用以下例程读取时间的值 但是,打印输出中的差值始终为零。有人有主意吗 我错过了什么 char* const ADDR = (char *) 0x90000008; unsigned long cycle_count_val() { unsigned long res; asm volatile ( "set ADDR, %%l0

我正在使用的处理器架构有一个时间标签计数器,我想读出它来进行性能测量。时间标签计数器被内存映射到 地址0x9000008。我使用以下例程读取时间的值 但是,打印输出中的差值始终为零。有人有主意吗 我错过了什么

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);
非常感谢你的帮助,
菲尔

我认为你不需要求助于assember——为什么你不能直接阅读:

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

我不认为你需要求助于assember——为什么你不能直接阅读以下内容:

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

是否确定时间戳是
字符
?否,它是32位内存位置中的30位值(MSB为0)是否确定时间戳是
字符
?否,它是32位内存位置中的30位值(MSB为0)只需
#将整个表达式定义为
现在
。只需
#将整个表达式定义为
现在