ioctl呼び出しを使用してSPIを介して非同期通信を行う関数がいくつかあります。
データペイロードはわずか数バイトであるため、これらの関数は非常に高速に実行されますが、タイミングが中断されないことが不可欠です。
CPUが他のスレッドにサービスを提供しているときに、これらの機能が中断されることがあることに気付きました。これにより、非同期通信が切断されてしまいます。タイミングを変えます。
これらの2つの関数について、中断されないように指定するにはどうすればよいですか?
ioctl呼び出しを使用してSPIを介して非同期通信を行う関数がいくつかあります。
データペイロードはわずか数バイトであるため、これらの関数は非常に高速に実行されますが、タイミングが中断されないことが不可欠です。
CPUが他のスレッドにサービスを提供しているときに、これらの機能が中断されることがあることに気付きました。これにより、非同期通信が切断されてしまいます。タイミングを変えます。
これらの2つの関数について、中断されないように指定するにはどうすればよいですか?
ほとんどの通常の OS (windows、OsX、linux など) の通常のプログラムではそれができないと思います。できれば、無限ループを中断できないと宣言するだけで、マルウェアがマシンをロックする可能性があります。デバイスドライバーでこのようなことを行うことは可能かもしれません。このレベルの制御が本当に必要な場合は、そのためのリアルタイム OS があります。
Linuxのカーネルモジュールでこれを行うことができると思います。
すべての割り込みを無効にすることは困難であり、危険です (そして、カーネルの更新によって中断される可能性があります)。絶対に必要でない限り、そうすることは避けてください。SPI の場合は、Android シリアル ライブラリのようなタイミングとカーネル構成を処理するドライバーに依存する必要があります。
プロトコルとタイミングをマイクロコントローラーに実装しようとしました (2 セットのピンで同時に異なる速度の異なる SPI が必要な場合)。マルチスレッドの問題がなくても完璧にするのは困難です。したがって、低レベルの通信呼び出しを自分で実装する必要があるかどうかを自問する必要があります。
これは、すべての割り込みを無効にする方法に関するあなたの質問に実際には答えていないことを認識していますが、最終目標にまったく同じように対処していると思います.