1

基本的にタイマーであるタスクがあります。したがって、スリープ状態になり、定期的にウェイクアップすることになっています..したがって、タイマータスクはたとえば10ミリ秒スリープします。しかし、起こっていることは、覚醒に一貫性がなく、時間内に正しく目覚めることに依存できないということです.

実際、私のランニングでは、睡眠時間に大きな違いがあります。時々、覚醒時に 1 ~ 2 ミリ秒変化することがあり、まったく元に戻らないことはほとんどありません。これは、カーネル スケジューラがすべてのスリープ状態と待機状態のタスクをキューに入れ、ポーリングして誰を目覚めさせるかを確認するときに、ラウンド ロビンだと思うからです。そのため、スケジューラが再度ポーリングするまでにタスクが期限切れになることがあります。割り込みが発生すると、ISR が制御を取得し、タイマーの起動を遅らせることがあります。

この種の問題を処理するための最良の解決策は何ですか?

(追加の詳細: タスクはワイヤレス ネットワークの MAC タイマーです。RTOS は u-velOSity マイクロカーネルです)

4

3 に答える 3

2

スケジューラーに頼るのではなく、OS が提供するタイマー API を使用する必要があります。ここでは、Linux ドライバー用のタイマー API を紹介します。

于 2011-10-20T09:56:10.800 に答える
1

筋金入りのタイミングが必要な場合は、OS スケジューラが十分ではない可能性があります (ご存じのとおり)。

可能であれば、別のタイマー ペリフェラルを使用し、その ISR を使用して最小限の処理を行い (重要なデータにタイムスタンプを付ける、いくつかのフラグを設定するなど)、ジッターの多いルーチンでそのデータを次のように使用できるようにしますその保証されていないタイミング。

于 2011-10-20T12:11:11.577 に答える
0

LinuxはRTOSではなく、おそらくそれが問題の原因です。

Linuxをさまざまな方法で、さまざまな範囲でリアルタイム使用に適したものにすることができます。いくつかの方法については、リアルタイムLinuxアプローチの比較と、期待できるリアルタイムパフォーマンスのレベルの評価を参照してください。

于 2011-10-22T08:21:55.283 に答える