シリアルポートを介してあまりにも多くのアクチュエータ(またはアクチュエータのセット)を処理する必要がある制御システムを設計しています。新しい設計(まだ実装されていません)は、複数のPOSIXスレッドでアクチュエーターを制御することになっています。
これにより、シリアルポートを複数回(複数のスレッドで)開くことができますか?はいの場合、同期書き込み/非同期読み取りメカニズムを作成します。シリアルポートに直接データを書き込むことができるn
スレッドM[0]
があります。M[n-1]
シリアルポートから直接読み取ることは想定されていません。代わりに、スレッドR
はループ内のポートからデータを読み取りwhile(true)
、それを待機している対応するスレッドにデータを提供することになっています。(データの準備ができて、それがスレッドM[i]
に属しているときに、応答を待機しているウェイクアップ)i
複数のスレッドでシリアルポートに書き込むことができるかどうかは、すべて質問に依存します。
注:現在、大学のメカトロニクスラボのデバイスにアクセスできないため、シリアルポートの動作をテストできません。
Xenomaiリアルタイムサブシステムでパッチされたカーネル2.6.38-8を使用しています(重要な場合)
シリアルポートと通信する従来のLinuxの方法にコードを移植しています。(開く/dev/ttyS0
、ボーレートを設定する、、read()
などwrite()
)現在、シリアルポートとの通信にはサードパーティのライブラリが使用されています。