割り込みベースの通信について
-
07-07-2019 - |
質問
シンプルなアーキテクチャがあります:
- メインチップ(arm9ベース)
- PICコントローラー
PICは、データ転送用の割り込みベースのI2C通信プロトコルを介してARMと通信します。割り込み内で、I2Cレイヤー(バス)からデータを読み取るタスクにシグナルを送ります。
データが限られている場合、通常、データを読み取って上位層に送信するのにそれほど問題はありません。このデータが非常に大きい場合、割り込みは長時間拘束されます。
最初の質問:
-
そうですか?
-
私が正しい場合、同じことを避ける方法は? ...または別のソリューションを使用できますか?
解決
I2Cインターフェイスからデータを引き出してバッファリングし、システムの他の部分に渡すなどの作業を行う、カーネルスレッドとも呼ばれる「ワーカースレッド」を用意します。割り込みルーチンを使用します。カーネルスレッドのブロックを解除するだけです。そうすれば、システムが実行しなければならない他の任務がある場合、割り込みハンドラーによって実行されるのを防ぐことはできず、デバイスからタイムリーにデータを取得できます。
他のヒント
割り込みルーチンの1回の実行で完全なパケットを読み取らないでください。ハードウェアのサポートに応じて、1サンプル/ビット/バイトを処理し、データをバッファーに保存し、パケットが完了したときにのみタスクに信号を送る必要があります。
所属していません StackOverflow