Я пытаюсь измерить разницу во времени между двумя сигналами на параллельном порту, но сначала я узнал, насколько точна и точна моя измерительная система (AMD Athlon (tm) 64 X2 Dual Core Processor 5200+ × 2 ) на SUSE 12.1 x64.
Итак, после некоторого чтения я решил использовать 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 nano second. И я был так счастлив!
Но вот моя проблема, когда я попытался проверить этот факт с помощью этого другого кода:
#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, time3 и time4 объявляются, но не используются в этом примере, потому что я делал с ними тесты.
Выход в этом примере колеблется между 978 и 1467 нс. оба числа кратно 489, это заставляет меня думать, что 489 нс - это мое РЕАЛЬНОЕ разрешение. далекого от 1 нс, полученного выше.
Мой вопрос: есть ли ЛЮБОЙ ПУТЬ получения лучших результатов? я что-то пропустил?
Мне действительно нужно разрешение не менее 10ns для моего проекта. Давай! GPS может получить лучшее разрешение, чем ПК?