4

Ubuntuを実行しているBeagleboneがあります。3つのオンボードATDコンバーターから100KS/sで継続的にサンプリングし、サンプルのすべてのウィンドウで相互相関DSPアルゴリズムを実行します。しきい値を超える相関値が見つかったら、その値をPCに送信します。

私の懸念は、Ubuntuでのプロセススケジューリングです。プロセスがスワップアウトされ、この間にATDサンプルが利用可能になると、プロセスはサンプルを見逃します。プロセスがすべてのサンプルをキャプチャし、それをメモリに保存することを確認する必要があります。

そうは言っても、Beagleboneで割り込みをトリガーして、ATDサンプルの準備ができている場合、その時点でプログラムにプロセッサがなくても、サンプルがプログラムのメモリに保存されるようにする方法はありますか?

ありがとう!

4

2 に答える 2

0

EDMA をトリガーしたり、PRUSS を使用したりできる場合があります。おそらく、beagleboard@googlegroups.com で質問するのが最善でしょう。BeagleBone には DSP 自体はありません。

于 2013-03-04T02:32:32.090 に答える
0

これはあなたの質問に対する正確な答えではありませんが、プロセスがどのように機能するかを説明できれば幸いです。AD変換のために実行しているハードウェアについて言及していないので、おそらくこれができる最善の方法です:

同じ問題に直面しているオーディオ ハードウェアの場合、解決策はハードウェアとドライバーが連携することです。ハードウェアがバッファーを十分に満たすと、(割り込みまたは同様のメカニズムを介して) ドライバーに通知します。場合によっては、ドライバーがハードウェアまたはそのようなものをポーリングすることも可能ですが、それは効率の悪い解決策であり、誰もそのようにしているとは思えません (おそらく安価なハードウェアでは?)。そこから、ドライバー プロセスはエンド ユーザー プロセスを直接呼び出すか、単に関連するエンド ユーザー プロセスを「実行可能」としてマークします。いずれにせよ、制御をエンド ユーザー プロセスに移す必要があります。

そのためには、エンド ユーザー プロセスが、その時点で CPU を占有している他のプロセスよりも高い優先度で実行されている必要があります。プロセスが常にキューの最初になるようにするために、適切なアクセス許可を使用して高い優先度でプロセスを実行できます。非常に高い優先度で実行することもできます。

最優先のプロセスが実行可能から実行に移行するまでにかかる時間は、OS の「レイテンシ」と呼ばれることがありますが、より具体的な専門用語があると思います。Linux の遅延は 1 ミリ秒程度ですが、「ハードな」リアルタイム OS ではないため、これは保証されません。これがデータのチャンクを処理するには長すぎる場合は、ドライバーでその一部をバッファリングする必要がある場合があります。

于 2013-03-04T03:20:11.900 に答える