Ключевые слова:time, sleep, (найти похожие документы)
Date: Fri, 8 Feb 2002 12:30:58 +0000 (UTC)
From: "Rinat H. Sadretdinow" <rhs@newmail.ru>
Newsgroups: fido7.ru.unix.prog
Subject: Определение интервала с точностью до микросекунды
> Я очень сомневаюсь, что RTC позволяет _считывать_ время с
> точностью до микросекунды.
Пардон, обздался. Но оригинальному автору вроде бы как надо было от 0.05
миллисекунд до 100 миллисекунд. RTC позволяет делать периодические
прерывания с частотой до 16384Hz для root. А 16384Hz это уже не милли, это
вроде как микро уже.
=== cut ===
[rhs@rhs foobar]$ cat > foobar.c
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/rtc.h>
int main ( void )
{
volatile int i;
int fd, rc;
unsigned long tmp, data;
if (-1 == (fd = open ("/dev/rtc", O_RDONLY)))
perror ("/dev/rtc");
else
{
printf ("let's party goes!\n");
for (rc = 0, tmp = 2; tmp <= 65536 && !rc; tmp *= 2)
{
printf ("trying %ldHz...\n", tmp);
if (-1 == (rc = ioctl (fd, RTC_IRQP_SET, tmp)))
{
printf ("the show is over!\n");
break;
}
if (-1 == (rc = ioctl (fd, RTC_PIE_ON, 0)))
{
perror ("ioctl");
break;
}
for (i = 0; !i;)
{
if (-1 == (rc = read (fd, &data, sizeof (data))))
{
perror ("read");
break;
}
++i;
}
if (-1 == (rc = ioctl (fd, RTC_PIE_OFF, 0)))
{
perror ("ioctl");
break;
}
}
close(fd);
}
}
^D
[rhs@rhs foobar]$ gcc foobar.c -o foobar
[rhs@rhs foobar]$ ./foobar
let's party goes!
trying 2Hz...
trying 4Hz...
trying 8Hz...
trying 16Hz...
trying 32Hz...
trying 64Hz...
trying 128Hz...
the show is over!
[rhs@rhs foobar]$ sudo ./foobar
let's party goes!
trying 2Hz...
trying 4Hz...
trying 8Hz...
trying 16Hz...
trying 32Hz...
trying 64Hz...
trying 128Hz...
trying 256Hz...
trying 512Hz...
trying 1024Hz...
trying 2048Hz...
trying 4096Hz...
trying 8192Hz...
trying 16384Hz...
the show is over!
[rhs@rhs foobar]$
=== cut ===
> В linux/Documentation/rtc.txt этого нет.
Нет.
> Знать до микросекунды и точнее дают таймеры i8254, TSC и PIIX (из
> стандартно доступных).
Да. Я тут глянул на имплементацию gettimeofday, в конце концов она
пользуется либо TSC (если при компиляции ядра было указано, что CPU его
поддерживает), либо нулевой канал таймера. Видать то, что функции работы с
CMOS расположены в том же исходнике, сбило меня с толку и я с какого-то
перепугу решил, что gettimeofday тоже имеет к этому всему отношение.
--
Пока!