異なる割り込みが発生したときに、キューのput関数とpull関数が呼び出されるキューがあります。このシナリオで競合状態を防止する方法はありますか? 割り込みサービスルーチンのセマフォを待つことはできませんが、同様の機能を作成する最良の方法は何ですか。 Zynq FPGAのARM-Cortex A5プロセッサを使用してコードを開発しています。ISR(割り込みサービスルーチン)でのセマフォのような同期
答えて
各割り込みがプロセッサの "割り込み禁止"状態をオンにし、処理している割り込みが同じ優先度を持っていると仮定すると(つまり、他の割り込みの実行を中断できないと仮定して)競合状態が発生していない可能性があり、ISRは共有キューにアクセスできます。
(割り込みが発生すると、プロセッサは割り込み禁止モードに入り、すべてのレジスタをスタックにプッシュし、ISRエントリポイントにジャンプしてそこで実行を継続します)ISRが完了すると、 "iret"この簡単な説明は、異なるプロセッサやプラットフォームで異なる方法で実装することができます)。
共有キューインデックスの操作は、ドライバハンドラスレッドから進行中のポップのステージに関係なくISRが安全にプッシュできるようにする必要があります。 – ThingyWotsit
@ThingyWotsit、あなたは絶対に正しいです。幸いにもここでは、キューはISRでのみアクセスされているようです。さもなければ、非ISRアクセス自体が安全なアクセスのために割込み禁止命令を実行すべきである。 –
- 1. C++の割り込みサービスルーチン
- 2. 8051で外部割り込みサービスルーチン(ISR)を終了する方法
- 3. I2C ISRおよび割り込み
- 4. 割り込みサービスルーチン内のmutexes
- 5. pic18で割り込みサービスルーチンを行う方法
- 6. 割り込みサービスルーチンからの奇妙な動作
- 7. arduino割り込みサービスルーチン内で関数ポインタを使用してISRを変更する方法は?
- 8. msp430シリーズマイクロコントローラの割り込みサービスルーチンの名前は何ですか?
- 9. ftraceはどのように割り込みサービスルーチンを追跡しますか?
- 10. カーネルで割り込みサービスルーチンを追加する
- 11. 割り込みサービスルーチンには何もありませんか?
- 12. 割り込みと非同期
- 13. Mspgccで割り込みハンドラ(ISR)を宣言するには?
- 14. 割り込みサービスルーチンにほとんどのシステムコールが含まれない理由
- 15. 非同期スレッドでの割り込み方法
- 16. 割り込みサービスルーチンのためのx86_64のレジスタを保存するには?
- 17. RTCと周期的な割り込み
- 18. 同期データ取得のためのハードウェア割り込み
- 19. 割り込みコンテキストとプロセスコンテキストとの同期をとる方法
- 20. 0のセマフォ同期0
- 21. 読み取り/書き込み同期
- 22. マルチプロセス同期 - セマフォより優れていますか?
- 23. ctr + alt + deleteのようなカスタムOS割り込み
- 24. ミューテックスとセマフォとのプロセス間同期
- 25. Arduinoでの割り込み
- 26. タイマ割り込みサービスルーチンが10マイクロ秒以上の速度で動作しているホストコンピュータ
- 27. Javascript非同期実行:コードを実行するコールバック割り込みですか?
- 28. TRAP、ソフトウェア割り込みとハードウェア割り込みの違いは?
- 29. 埋め込み型Cでのセマフォおよび非リエントラント関数
- 30. codevisionavrの2つの異なる割り込みに対して同じISRを呼び出す方法はありますか?
CはISRについては認識していません。プラットフォームについて詳しく説明し、コンパイル可能なサンプルコードを表示するのが理想的です。非常に簡単なシナリオでは、ISR内部で割り込みを防止するだけで十分です。 –
@FelixPalmenご意見ありがとうございます。私はそれを更新します –
注 - ISRからセマフォユニットを確実にPOSTできます。これは、I/Oが完了したスレッドに信号を送る最も一般的な方法です。待つことをお勧めしません。 – ThingyWotsit