2012-05-09 8 views
0

私はmsecs_to_jiffies(msecs)を使って遅延を取得しています。私は16ミリ秒の遅延が必要です。しかし問題は、入力1-10の場合は関数1を返し、11-20の場合は2、21-30の場合は3、息子の場合は関数3を返します。したがって、私は適切な遅延を設定することができません。私は10msのファクタでのみ遅延を設定することができます。私はHZ値を変えることができず、機能は眠ることもできません。msecからjiffiesへの変換

この問題の解決策をお勧めします。 ありがとう

+0

16msのスリープなしでの遅延は非常に悪いです。どの方法を使用しても、CPUを16ms固定することができます。 – nos

答えて

4

ナノ秒を使用している(あなたがシステムHZその後、低解像度での一定期間のための実行を中断したい場合は、高分解能タイマーを使用する必要があり、システムのHZの値が100

に設定されているようです解像度ではなく、jiffies)があなたのボードでサポートされ、カーネルで有効になっています。 http://lwn.net/Articles/167897/

したがって、システムHZを1000に変更し、1ミリ秒のジッピー解像度を得るか、高解像度タイマーを使用してください。

+0

解像度の高いタイマーまたは1ミリ秒のジッピー解像度であっても、スレッドが16msec(わずかなウィグルルームでも)だけスリープ/ディレイするという保証はありません。特殊なハードウェアと割り込みが必要です。 –

+0

これはカーネルドライバであるため、スレッドなどのスケジュールされたエンティティが存在しない可能性があります。デバイスドライバは、必要に応じて先取りされることなく、簡単にカーネルを結びつけることができますが、それは悪い考えです。 – nos

+1

@ MahmoudAl-Qudsi一回限りのモードをサポートできるタイマーと必要な解像度を除けば、特殊なハードウェアは必要ありません。 Linux-RTパッチを使って、Linuxが動作するリアルタイム操作が可能なOSが必要です。参照:https://www.osadl.org/Single-View.111+M59e3481cdfe.0.htmlレイテンシーの数字 – gby

3

あなたはできません正確に16msのための睡眠。 は少なくとも 16msですが、16msはスリープできます。これは、Linux(または他のデスクトップOS)が動作する方法ではなく、リアルタイムOSではなく、非決定論的な方法でスケジュールされており、実行できることは何もありません。

何をしようとしていても、別の方法で進む必要があります。あなたが提供した小さな情報で、私が言うことができることは、あなたがやろうとしていることはできないということです。

関連する問題