0

私たちはシンプルなアーキテクチャを持っています:

  1. メインチップ (arm9 ベース)
  2. PICコントローラー

PIC は、割り込みベースの I2C 通信プロトコルを介して ARM と通信し、データを転送します。割り込み内で、I2C 層 (バス) からデータを読み取るタスクに信号を送ります。

データが限られている場合、通常、データを読み取って上位層に送信するのにそれほど問題はありません。このデータが非常に大きい場合、割り込みは長時間拘束されます。

最初の質問は次のとおりです。

  1. 私は正しいですか?

  2. 私が正しい場合、どうすれば同じことを避けることができますか? ...または、別の解決策はありますか?

4

2 に答える 2

5

カーネル スレッドと呼ばれることもあるある種の「ワーカー スレッド」を用意します。その仕事は、I2C インターフェイスからデータを取り出してバッファリングし、システムの他の部分に渡すことです。 -カーネルスレッドをブロックします。そうすれば、システムが実行しなければならない他のタスクがある場合でも、割り込みハンドラーによって実行が妨げられることはなく、デバイスからデータをタイムリーに取得できます。

于 2009-09-15T11:36:08.677 に答える
3

割り込みルーチンの 1 回の実行で完全なパケットを読み取るべきではありません。ハードウェア サポートに応じて、1 つのサンプル/ビット/バイトを処理し、データをバッファーに格納し、パケットが完了したときにのみタスクに通知する必要があります。

于 2009-09-15T11:27:34.860 に答える