到目前为止我尝试了什么:
> clock_gettime(CLOCK_MONOTONIC):在目标硬件上以1ms为单位递增(由于我的代码中的错误,我认为10ms的EDIT,1ms是正确的,但仍然不是很好)
> gettimeofday():类似于clock_gettime
我没有尝试过:
> System.nanoTime():这不是原生的.我相信它基于clock_gettime(),但我更愿意找出引擎盖下的内容并直接使用它.
> / dev / rtc
>某种ARM指令/设施,可能是SysTick(http://web.eecs.umich.edu/~prabal/teaching/eecs373-f10/readings/ARMv7-M_ARM.pdf)或通用定时器(GPT).
另见(相关问题,但没有答案):
> High-precision timer in Android JNI
> Getting High Precision Timing on Android
解决方法
在ARM上访问循环计数器有两种方法:在Linux中使用perf_event子系统或直接从CP15协处理器读取循环计数器. perf_event方法只有在编译Linux内核且支持该子系统(文件/ proc / sys / kernel / perf_event_paranoid存在)且读取事件计数器不受限制时才会起作用(文件/ proc / sys / kernel / perf_event_paranoid包含0或 – 1;使用root访问权限,您可以覆盖此文件中的值).只有在启用了对性能计数器的用户模式访问时,CP15方法才会起作用(默认情况下,它始终处于禁用状态,您必须修补内核或使用内核驱动程序启用它). Yeppp! library(我是作者)能够在可用时使用任一方法,并包括内核模式驱动程序以启用对性能计数器的用户模式访问.你可能会发现this example很有帮助.