延迟使用覆盆子pi上的计时器

时间:2013-07-08 13:59:15

标签: timer raspberry-pi

我需要在线程函数内创建一个准确的延迟(大约100us)。我尝试使用nanosleep功能,但它不够准确。我读了一些关于如何读取硬件1MHz定时器的帖子,所以在我的功能上为了创建一个100us延迟你试过这样的事情:

prev = *timer;    
do {
    t = *timer;
} while ((t - prev) < 100);

然而,该程序似乎留在循环内。但是如果我在循环中插入一个小的纳米睡眠它可以工作(但是精度不高):

sleeper.tv_sec  = 0;
sleeper.tv_nsec = (long)(1);
prev = *timer;
do {
    nanosleep (&sleeper, &dummy);
    t = *timer;
} while ((t - prev) < 500); 

我在一个程序中尝试了第一个版本并且它可以工作,但是在我的主程序中,这是在一个线程中它没有。

有谁知道第一个版本(没有小纳米睡眠)不起作用?

1 个答案:

答案 0 :(得分:1)

我很遗憾地说,但Raspberry Pi的操作系统不是实时操作系统&#34;。换句话说,由于固有的OS调度限制,您不会在用户空间程序中获得一致的100us精度。如果你需要那种精度,你应该使用像Arduino这样的嵌入式控制器。