我需要在线程函数内创建一个准确的延迟(大约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);
我在一个程序中尝试了第一个版本并且它可以工作,但是在我的主程序中,这是在一个线程中它没有。
有谁知道第一个版本(没有小纳米睡眠)不起作用?
答案 0 :(得分:1)
我很遗憾地说,但Raspberry Pi的操作系统不是实时操作系统&#34;。换句话说,由于固有的OS调度限制,您不会在用户空间程序中获得一致的100us精度。如果你需要那种精度,你应该使用像Arduino这样的嵌入式控制器。