这个计算如何运作?

时间:2015-09-09 14:09:07

标签: c++ timer linux-kernel arm arm64

我遇到过这段代码,自epoc开始以来已经计算了纳秒,自启动以来我已经计算好了但

http://code.metager.de/source/xref/cloudius-systems/osv/arch/aarch64/arm-clock.cc#61

[x11, x12 ... x1m
 x21, x22 ... x2m
 .
 .
 xn1, xn2 ... xnm]

CNTVCT是循环计数器寄存器,为什么该寄存器的值除以CPU频率再乘以NANO_PER_SEC?

此外,如何从这些纳秒中推导出时间?

1 个答案:

答案 0 :(得分:1)

  

为什么该寄存器的值除以CPU频率   乘以NANO_PER_SEC?

转换单位

CNTVCT 在每个时钟周期递增

频率是每秒的时钟周期

NANO_PER_SEC 是每秒纳秒

所以看看单位:

CNTVCT * NANO_PER_SEC
-------------
frequency   
他们是:

clocks * nano/sec
------------------------
clocks/sec

等于(将分子和分母乘以sec

clocks * nano
-------------
clocks

等于(将分子和分母除以clocks

nano

所以你需要按频率除以获得秒并乘以纳米以使其达到纳秒秒

  

此外,如何从这些纳秒中推导出时间?

纳秒是自启动时间,而不是纪元

但是,你可以得到当前的时间,减去当前的纳秒,然后按照纳秒进行调整