1

組み込み C プロジェクト用の RS485 ドライバーを作成しています。

ドライバーは着信メッセージをリッスンしており、完全なメッセージを受信して​​読み取る準備ができたら、上位層のアプリケーションに通知する必要があります。

これを行うための好ましい方法は何ですか?

割り込みを使用して?SW 割り込みをトリガーし、ISR 内からメッセージを読み取りますか?

アプリケーションがドライバーを定期的にポーリングするようにしますか?

4

1 に答える 1

1

私は通常、受信データを保護したり、送信データをクリーンアップしたりするために、ISR でできるだけ少ない作業を行います。これは通常、ハードウェア バッファーから循環バッファーにデータを読み取ることを意味します。

受信時、マルチスレッド OS の場合、受信割り込みはハードウェアを空にし、割り込みをクリアして、受信データを処理するようにスレッドに通知します。

ポーリング環境の場合、受信割り込みはハードウェアを空にし、割り込みをクリアし、フラグを設定して、処理するものがあることをポーリング ループに通知します。

割り込みはいつでも発生する可能性があるため、ISR とポーリング ループまたは処理スレッドの間で共有されるデータ構造は、相互排除メカニズムを使用して保護する必要があります。多くの場合、これは、ポインターまたはカウントを調整している間、割り込みを一時的に無効にすることを意味します。

受信したデータがパケット化されている場合は、ISR でパケット境界を探し、完全なパケットが到着したときにのみハンドラーに通知できます。

于 2009-08-31T12:37:11.300 に答える