我需要在ARM内核设备(使用高通的四核Snapdragon S4 SoC的Nexus 7)上调试Linux内核时测量非常短的时间间隔。我发现ktime_get()可以测量的最短时间间隔是30us,因为Nexus 7使用30MHz定时器,但我的测试代码(一个简单的中断处理程序)运行时间不到30us,所以我总是得到0us或30us。我试着读下面的性能计数器:
unsigned long t1, t2;
asm volatile ("MRC p15, 0, %0, c9, c13, 0\t\n": "=r"(t1));
...... //my interrupt handling code
asm volatile ("MRC p15, 0, %0, c9, c13, 0\t\n": "=r"(t2));
unsigned long interval = t2 - t1;
但“t1”,“t2”和“interval”的值始终为0.
我的问题是: 1.“asm volatile(”MRC p15,0,%0,c9,c13,0 \ t \ n“:”= r“(值));”在Nexus 7上工作? 这个寄存器是什么? CPU在当前CPU频率或特定频率下循环? 3.有没有什么方法可以测量短于Nexus 7上30MHz定时器的代码执行时间?
非常感谢提前!
由于 王莉