2

read() 関数で Mutex を使用して、ADC が既に使用されている場合にスレッドをブロックする ADC 用のドライバーを作成しました。

私は現在、TWI インターフェースでデータを読み戻すために同じ方法を採用しています。

TWI インターフェイスで送信されるメッセージを待ち行列に入れるためにメッセージ キューが使用されるのを見てきました。しかし、データを読み戻そうとしている場合は、とにかく応答を待ちたいと思うでしょう。では、Mutex アプローチの方が適切ではないでしょうか。

どのアプローチを使用すべきかについて、人々の考えを教えてもらえますか? 長所短所?

ありがとう。

4

1 に答える 1

2

インターフェースを実行する 1 つのスレッドに要求/応答オブジェクトをキューに入れることは、より複雑ですが、より柔軟です。同じメカニズムで同期交換と非同期交換を行うことができます。プロトコル交換を必要とするスレッドには選択の余地があります。インターフェイス スレッドが応答を受信したことを通知するために何らかの同期オブジェクトを待機するか、独自の応答キュー メカニズムを提供して、複数の要求をインターフェイスまでキューに入れることができます。スレッドと返信は、それぞれが完了するとキューに入れられます。私は通常、「OnCompletion(thisRRobject)」関数/メソッドを RR クラスに提供し、完了時にインターフェイス スレッドが呼び出すので、実際の応答アクションを要求側スレッドのコードに委譲します。RR オブジェクトには、例外/エラー メッセージ、タイムアウト間隔などのメンバーを含めることもできます。このような複雑さは、ライブラリでは問題ありません。

..または、ミューテックスを使用することもできます。シンプルですが、同期のみ - 前の交換が進行中の場合、すべての要求スレッドは待機する必要があります。要求しているスレッドが待機/ブロックしたくない場合は、タフです。

コース用馬...

于 2012-12-28T12:05:42.250 に答える