2009-06-23 5 views
1

Windows CEで100マイクロ秒未満の精度でスリープすることは可能ですか?ジッタが少ないほど、理想的には1桁のマイクロ秒の応答時間が必要です。Windows CEで<100uSの正確なスリープ

私たちが本当に望むのは、非常に低いジッタを持つ5msタイマーです.Windows CEのWaitFor [Single | Multiple]オブジェクトとSleep APIはミリ秒単位で動作しますが、サブms時間を修正することはできません。コードが実行されるため、サイクルが徐々に変化します。

これが不可能な場合は、その情報も非常に役立ちます。

答えて

2

This MSDN articleにはWinCEでタイマ割り込みを設定するためのコードがいくつかありますので、絶対に可能です。

WinCEのバージョンにロックされていない場合は、Tenasysを調べることをお勧めします。これは、標準ハードウェア上でWindowsと並行して動作するRTOSを提供すると主張しています。

また、QNXについても良いことを聞いたことがありますが、私はその製品を使用していません。私はそれがWindowsと互換性があるとは思わない。

+0

特定のベンダのライブラリと非リアルタイムで(CE版、ワインに対応した正規版Windows版)のインターフェースができれば、特定のOSにロックされているわけではありません。しかし、ライセンスコストが懸念されるため、サードパーティ製のRTOSをWindowsのライセンスコストに加えてしまうことは望ましくありません。そのようなタイマー割り込みをハッキングするより簡単なことはありますか、それとも最善のものですか? – bdonlan

+0

そのリンクは、ちょっとしたグーグルの結果だった。私は、他の方法で高解像度のタイマーを設定することの難しさについて自信を持って答えるために、Windows CEに精通していません。 –

1

これはできません。デスクトップでさえ不可能です。典型的なオペレーティングシステムは単にこのように機能しません。

あなたが必要とするものは、4ミリ秒ごとに正確に発砲するものであるか、運が悪いものであれば何でもよい。あなたが本当に必要とするものが毎秒250回正確に発射するものであれば、より多くの可能性があります。あなたが後者を必要としているなら、私はアプローチを提案することができます。

+0

これは正しくないようです。 VoIPオーディオパケット間の標準的な間隔は20ms(u/a-law)であり、デスクトップソフトウェアはその処理に問題がありません。そうした方法で何百ものオーディオストリームを生成しているサーバーなどがあります。 (ジッタが<1msの場合)はい - 「正確に」4msは実行できません。しかし、最大0.5msの賢明なジッタを使用すると、通常のセットアップが必要になります。特に、そのようなストリームが1つだけ必要な場合は特にそうです。 – viraptor

+0

私はVoIPオーディオパケットが正確なタイミングで何をしなければならないのか分かりません。ネットワークカードは、CPUがデータをポーリングするまで、それを受け取ってバッファに格納するデータをポーリングしません。 –

0

ジッタを補正するには、高分解能タイマにアクセスする必要があります。 持っているCPUがあるかもしれません。もしそうでなければ、割り込みコントローラは、

最も簡単な方法は、リアルタイムでLinuxを使用し、そのライブラリにWINEすることです。 定期スレッドが必要です。

Take a look at this report from NIST.

1

睡眠にあなたの必要性は、バッテリー/スレッド歩留まりの問題と正確なタイミングの問題だけではない場合は、Windows CEデバイスで「performancecounter」を使用することができます。 XScaleとクアルコムのCPUでは、これは内部のチップタイマであり、1ms以下の粒度を持っています。古いOMAPプロセッサとSamsungプロセッサでは、パフォーマンスカウンタAPIが1msのシステムチックを通過しており、ジッタが非常に多い。

L.B.

関連する問題