2013-07-08 1490 views
1

我需要在線程函數內部創建精確的延遲(大約100us)。我嘗試過使用nanosleep函數,但它不夠準確。我爲了創建一個100us的延遲Y讀取一些後如何讀取硬件1MHz的計時器,所以在我的函數試圖這樣的事情:在樹莓派上使用定時器延遲

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

我很遺憾地說,但Raspberry Pi的操作系統不是「實時操作系統」。換句話說,由於固有的操作系​​統調度限制,用戶空間程序中的精度不會一致。如果你需要這種精度,你應該使用像Arduino這樣的嵌入式控制器。