パラレル ポートで 2 つの信号間の時間差を測定しようとしていますが、最初に、SUSE の測定システム (AMD Athlon(tm) 64 X2 デュアル コア プロセッサ 5200+ × 2) がどれほど正確で正確かを知りました。 12.1×64。
したがって、いくつか読んだ後、clock_gettime() を使用することにしました。まず、このコードを使用して clock_getres() 値を取得します。
/*
* This program prints out the clock resolution.
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main( void )
{
struct timespec res;
if ( clock_getres( CLOCK_REALTIME, &res) == -1 ) {
perror( "clock get resolution" );
return EXIT_FAILURE;
}
printf( "Resolution is %ld nano seconds.\n",
res.tv_nsec);
return EXIT_SUCCESS;
}
出力は 1 ナノ秒でした。そして、私はとても幸せでした!!
しかし、この他のコードでその事実を確認しようとしたとき、ここに私の問題があります:
#include <iostream>
#include <time.h>
using namespace std;
timespec diff(timespec start, timespec end);
int main()
{
timespec time1, time2, time3,time4;
int temp;
time3.tv_sec=0;
time4.tv_nsec=000000001L;
clock_gettime(CLOCK_REALTIME, &time1);
NULL;
clock_gettime(CLOCK_REALTIME, &time2);
cout<<diff(time1,time2).tv_sec<<":"<<diff(time1,time2).tv_nsec<<endl;
return 0;
}
timespec diff(timespec start, timespec end)
{
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return temp;
}
これは、clock_gettime の 2 つの呼び出し間の時間を計算します。time3 と time4 は宣言されていますが、この例ではテストを行っていたため使用されていません。
この例の出力は、978 ~ 1467 ns の間で変動しています。どちらの数値も 489 の倍数です。これにより、489 ns が私の実際の解像度であると思います。上記で得られた 1 ns からはかけ離れています。
私の質問: より良い結果を得る方法はありますか? 私は何かを逃していますか?
私のプロジェクトには、少なくとも 10ns の解像度が本当に必要です。来て!GPS は PC よりも優れた解像度を得ることができますか??