0

I2C バス上の外部ペリフェラルと継続的に双方向に通信できるようにするには、いくつかのクライアント プログラム (ステレオ DSP オーディオ ジェネレーター) が必要です。データ レートは約 16kB/s で、更新は 1ms ごとに行われ、すべて 700MHz CPU で実行されます。プログラムは読み取りと書き込みに同時にアクセスする必要がありますが、書き込み時のロックは気にしません。

私は、生の I2C 通信を管理するデーモンを想定しています。クライアント オーディオ プログラムは、次の IPC オプションのいずれかを介してデーモンと通信します。

  • DBUS
  • Berkeley/POSIX ソケット
  • メモリマップファイル

DBUS ではパフォーマンスの問題があり、Berkeley/POSIX ソケットでは複数のクライアントの処理について確信が持てません。また、デーモン通信はオーディオ レンダリングと同じスレッドで発生する必要があるため、ロックが発生しないことも重要です。

メモリ マッピングは、タスクに適しているように見えます。入力には 4 バイト、出力には 4 バイトが必要です。出力バイトを今すぐ書き込む必要があることをデーモンに伝える何らかの方法と、現在継続的にファイルを更新する必要があることをデーモンに伝える何らかの方法があります。入力バイト。しかし、私が理解しているように、メモリ マッピングはオペレーティング システムによるバッファリングに依存しているため、クライアント アプリの操作中にデーモンが入力バイトを更新するとどうなるかわかりませんread()

私のシナリオでのプロセス間通信の最適なオプションは何ですか?

4

0 に答える 0