1

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

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

但是,该程序似乎停留在循环内。但是,如果我在循环中插入一个小的 nano sleep 它可以工作(但会失去精度):

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

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

有谁知道第一个版本(没有小的 nanosleep)不起作用?

4

1 回答 1

1

很抱歉,Raspberry Pi 的操作系统不是“实时操作系统”。换句话说,由于固有的操作系​​统调度限制,您不会在用户空间程序中获得一致的 100us 精度。如果您需要这种精度,您应该使用像 Arduino 这样的嵌入式控制器。

于 2013-10-11T13:49:49.583 回答