2009-06-23 85 views
1

在Windows CE上睡眠的時間可能會精確到小於100微秒的時間嗎?抖動越小越好 - 理想情況下,我們希望獲得單位數微秒的響應時間。在Windows CE上<100uS準確睡眠

我們真正想要的是具有非常低抖動的5ms定時器 - 雖然Windows CE WaitFor [單|多]對象和睡眠API以毫秒爲單位工作,但我們無法糾正亞毫秒時間代碼可能需要運行,所以循環會逐漸漂移。

如果這是不可能的,那麼這些信息也會很有幫助。

回答

2

This MSDN article有一些代碼在WinCE中設置500us定時器中斷,所以這是絕對有可能的。

如果你沒有被鎖定到你的WinCE版本,你可能想看看Tenasys,他聲稱能夠在標準硬件上提供與Windows並行運行的RTOS。

我也聽說過有關QNX的好消息,但我還沒有使用他們的產品。然而,我不相信它以任何方式與Windows兼容。

1

這是不可能的。這在桌面上甚至是不可能的。典型的操作系統不會以這種方式運行。

如果你需要的是每4毫秒發射一次,或者任何你不幸的事情。如果你真正需要的是每秒精確射擊250次,這可能更可行。如果你需要後者,我可以建議一種方法。

+0

這看起來不正確。 VoIP音頻數據包之間的標準間隔爲20毫秒(u/a-law),並且沒有桌面軟件在處理時遇到問題;或者以這種方式生成數百個音頻流的服務器。 (抖動<1ms)是 - 「精確」4ms是不可行的。但具有高達0.5ms的明顯抖動,它應該是一個相當正常的設置 - 尤其是如果只需要一個這樣的流。 – viraptor 2010-05-10 05:56:21

+0

我不確定什麼VoIP音頻數據包必須與精確的時間。網卡不會輪詢數據,因爲它會將數據傳送到緩衝區,直到CPU輪詢數據爲止。 – 2010-05-11 01:19:57

0

要糾正抖動,您需要訪問高分辨率定時器。 您擁有的CPU可能有一個。如果不是,中斷控制器可能會。

最簡單的方法是實時使用Linux,並將您的方式用於該庫。 你想要一個定期線程。

Take a look at this report from NIST.

1

如果你需要的睡眠是不是電池/線程收益問題,只是一個準確的時機問題,你可以使用Windows CE設備「的PerformanceCounter」。在XScale和Qualcomm CPU上,這是內部芯片定時器,具有小於1ms的粒度。在舊的OMAP和三星處理器上,性能計數器API正在通過1ms系統時鐘,並且存在很多抖動。

L.B.