1

私は組み込みシステムを使用しており、クロックに非常に敏感で、最も正確である必要があるユーザー空間アプリケーションと最も正確なクロックをカーネルモジュール/ドライバーで共有したいと考えています。

  1. これらの関数は、コンテキスト スイッチと巨大なオーバーヘッドを必要とし、システム コール以降のクロックは正確ではありません。

  2. ユーザー空間アプリケーションが直接アクセスできると仮定して、カーネルモジュールから共有整数をjiffyごとに増やすことを考えましたinteger/longlong変数は大きなオーバーヘッドです。

私は何をすべきか?

4

1 に答える 1

5

clock_gettime()(起動時からの)現在の時刻を取得するために、CLOCK_MONOTONIC(単調だがNTP の影響を受けるため安定していないCLOCK_MONOTONIC_RAW)または(単調で安定しているが、Linux 固有でカーネル >= 2.6.28 が必要)のいずれかで使用したい。

正確な間隔でウェイクアップするには、 を使用clock_nanosleep()して指定しますTIMER_ABSTIME。残念ながらclock_nanosleep()、 のみをサポートし、 はサポートCLOCK_MONOTONICしていないため、これらのクロックが異なる可能性があるため、CLOCK_MONOTONIC_RAWで取得したウェイクアップ時刻を渡すことはできません。CLOCK_MONOTONIC_RAWの戻りコードを確認することを忘れないでくださいEINTR

于 2012-08-16T18:11:11.887 に答える