1

センサーデバイス用のI2Cドライバーを作成したいと思います。変換時間はゼロ以外であり、デバイスがビジーになるまで待機してビ​​ジー状態をポーリングするためにカーネル時間を無駄にしたくありません。

タイマーを設定して、時々アップデートを呼び出すと思いました。

ただし、実行がI2C機能に達すると、システム全体がフリーズします。

私は本当に単純化された例を用意しましたが、それは機能していません。I2Cアクセスまではすべて問題ありません。

http://pastebin.com/kP5LCK2c

I2Cのものがなくても、コードは機能します。タイマーがなくても、I2Cは機能します。

I2Cを非同期(非ブロッキング)方式で使用する方法が見つかりませんでした。

4

1 に答える 1

2

i2c 関数はスリープ状態になるため、タイマーから呼び出すことはできません。幸いなことに、タイマーは将来の作業をスケジュールする唯一の方法ではありません。ワーク キューを見てください。

特に、 を見てくださいqueue_delayed_work。これにより、将来、スリープできるプロセス コンテキストで関数を実行できるようになります。

于 2012-10-31T14:28:18.740 に答える