Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 时钟单调与时钟单调原始截断值_C_Linux_Raspberry Pi_Precision_Timing - Fatal编程技术网

C 时钟单调与时钟单调原始截断值

C 时钟单调与时钟单调原始截断值,c,linux,raspberry-pi,precision,timing,C,Linux,Raspberry Pi,Precision,Timing,我正在写一些需要纳秒分辨率的测试代码。当我使用clock_gettime和clock_单调时,我得到了一个我期望的值:3327.874384321。 当我使用clock_gettime和clock_MONOTONIC_RAW时,我得到了一个我不期望的值:3327.875723000 我在一个循环中运行了它,返回的所有值都具有纳秒分辨率“截断”,000 uname的输出-a:Linux raspberrypi 3.12.22+#691抢占Wed Jun 18:29:58 BST 2014 armv

我正在写一些需要纳秒分辨率的测试代码。当我使用clock_gettime和clock_单调时,我得到了一个我期望的值:3327.874384321。 当我使用clock_gettime和clock_MONOTONIC_RAW时,我得到了一个我不期望的值:3327.875723000

我在一个循环中运行了它,返回的所有值都具有纳秒分辨率“截断”,000

uname的输出-a:Linux raspberrypi 3.12.22+#691抢占Wed Jun 18:29:58 BST 2014 armv6l GNU/Linux

对正在发生的事情有什么想法?如何解决?
我目前正在考虑禁用NTP,以便使用CLOCK_MONOTONIC

我认为您关于
CLOCK_MONOTONIC_RAW
被“截断”的结论是错误的。相反,硬件时钟源的分辨率可能只有微秒。您在
CLOCK_MONOTONIC
中看到的非零低位是因为硬件时钟源的时间戳正在按照通过
adjtime
/NTP进行的调整进行缩放,以纠正硬件时钟速率中的不精确性,否则会使其相对于实时漂移


为了验证这一假设,您应该使用
CLOCK\u MONOTONIC
采集大量计时器样本,并在低位中查找模式。我怀疑您会发现,您的所有时间戳的差异都是纳秒数的倍数,接近但不完全是1000,例如,可能是995或1005左右。

NTP与此有什么关系?为什么要原始时钟?根据各种读数,NTP可以调整时钟的单调性,从而造成任何样品被时钟调整污染的可能性。也许我误解了。。。这里有一个stackoverflow参考:正如对该问题的回答所述,
CLOCK_单调
不反映时间设置或NTP调整的不连续性。相反,它的前进速度只是调整以纠正硬件时钟频率相对于实时的不精确性。R-同意NTP改变速率(或频率),因此可能会扭曲结果,或者我仍然误解?如果NTP改变速率,它只是使其更接近正确,相对于您的硬件,它是倾斜的(时钟运行太快或太慢)。我不明白你为什么喜欢不太正确的值。我明白你说的,这就是为什么我这么做:clock_getres(clock_monotic,&res);printf(“单调分辨率:%lld.%.9ld\n”,(长-长)分辨率电视秒,分辨率电视秒);时钟(时钟、单调、原始和分辨率);printf(“单调分辨率原始:%lld.%.9ld\n”,(长-长)分辨率电视秒,分辨率电视秒);单调分辨率:0.000000001单调分辨率原始值:0.000000001。两者显示相同的值。linux会依赖getres吗?(为糟糕的格式感到抱歉)另一种可能性(尽管没有文档记录)是
CLOCK\u MONOTONIC\u RAW
可能会显示
CLOCK\u MONOTONIC\u rough
的未调整值,而不是
CLOCK\u MONOTONIC
。您可能需要阅读详细的源代码才能确定。如果说为了获得真正的纳秒分辨率,处理器必须运行>1GHz,这是否正确?我们能说因为树莓圆周率只有700兆赫左右,它不可能有纳秒的分辨率吗?@尼克:不,那不是真的。时钟可以来自独立于cpu时钟的源,在这种情况下,它可以具有更高的分辨率。您可能无法经常采样以查看完整分辨率,但在700 MHz时,内核仍需要报告1ns作为分辨率,因为无法报告1.4ns。