从内存映射寄存器中读取
Posted
技术标签:
【中文标题】从内存映射寄存器中读取【英文标题】:Reading from memory mapped register 【发布时间】:2010-12-07 13:31:46 【问题描述】:我正在使用的处理器架构有一个时间标签计数器,我想读出它来进行性能测量。时间标签计数器是内存映射到 地址 0x90000008。我使用以下例程从时间读取值 计数器,但是打印输出的差异始终为零。任何人的想法 我错过了什么?
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);
非常感谢您的帮助, 菲尔
【问题讨论】:
你确定你的时间戳是char
吗?
不,它是 32 位内存位置中的 30 位值(MSB 为 0)
【参考方案1】:
我认为你不需要求助于汇编 - 你为什么不能直接阅读:
uint32_t tbr = (*((uint32_t volatile *) 0x90000008))
【讨论】:
只是#define
整个表达式为now
。以上是关于从内存映射寄存器中读取的主要内容,如果未能解决你的问题,请参考以下文章