1

さまざまなセンサーから発生する割り込みには100以上の方法があることを考慮してください。すべてが同時に発生する可能性もあります。それを効率的に処理するようにソフトウェアをどのように設計できますか?

4

3 に答える 3

7

レイテンシーとスループットのどちらを最適化するかによって異なります。

効率についてお伺いしたので、スループットを見ていると思います。その場合、実証済みのパターンの1つは、割り込みハンドラーにセンサーを読み取らせ、コマンドと状態をキューに入れて、すぐに戻るようにすることです。

中断のないソフトウェアスレッドがキューからコマンドを選択し、ハンドラーのイベントをアナウンスします。これにより、タスクの切り替え時間が最小限に抑えられます。ドメイン固有のロジックを使用して、コマンドを組み合わせたり、関連性がなくなったコマンドを破棄したりできます。

これは基本的にウィンドウシステムの仕組みです。マウスのクリック、マウスの移動、キーボードの押下などのたびに、コマンドがキューに入れられます。ウィンドウシステムはコマンドを選択し、対応するハンドラーを呼び出します。キューからピックされるまでに関連性のないコマンドをスローするため、コマンドを結合するため、およびコマンドを迅速化するための広範なロジックがあります。

ネットワークスタックは同じモデルを使用します。パケットはネットワークレベルでキューに入れられ、メインループがパケットを取り出し、制御モデルの反転を使用して各パケットを処理します。

于 2010-06-27T03:11:02.900 に答える
2

経験則では、割り込みハンドラーは、割り込みを処理するために必要な作業をできるだけ少なくする必要があります。それらを「できるだけ短く」してください。

たとえば、デバイスがシリアルポートでメッセージを受信し、それらに応答する必要がある場合:UARTシリアルRX割り込みハンドラーは、着信バイトを読み取り、それをバッファーに格納する必要があります(バッファーオーバーフローがないことを確認します)。それでおしまい。次に、メインループタスクは後でバッファ内のデータを処理し、シリアルTX割り込みハンドラによって送信できるようにバッファ内に応答を作成する必要があります。

過去に、割り込みハンドラが通信プロトコルの処理全体を実行する組み込みソフトウェアを見てきました。動作しましたが、割り込みハンドラーの実行に時間がかかり、他の割り込みハンドラーの実行が遅れました。これにより、他の割り込みハンドラーがイベントを時間内に処理しないリスクが高まります。

于 2010-06-27T10:06:49.920 に答える
2

システムに実際に数百の割り込みソースがある場合、効率だけが問題ではない可能性があります。最悪の場合に要件を満たしていないことを確認するために、「ホールドオフ分析」を実行する必要がある場合があります。

まず、各ISRのワーストケース時間を測定します。次に、各割り込みXについて:

  1. 期限を決定します。割り込みXが発生してから災害(データの損失、通信ウィンドウの欠落など)までに経過できる最大時間はどれくらいですか。
  2. 割り込みXの処理を延期できる他のISRの最悪のシナリオを決定します。プロセッサの優先順位構造によっては、Xの直前に発生する割り込み、およびXが保留中に発生する割り込みを考慮する必要がある場合があります。
  3. 手順2で特定されたISRのすべての時間を合計します。合計が期限よりも大きい場合は、再設計する必要があります。

再設計には、ISRの高速化、FIFOの長さの調整、割り込みの頻度の変更(より多くのデータを収集する頻度を減らす、またはその逆)、特定の割り込みが同時に発生しないことが保証されるようにシーケンスを調整することが含まれます。万能の戦略はありません。(ただし、ほとんどの場合、ISRを高速化することは良いことです。)

于 2010-06-29T23:18:27.160 に答える