2

オペレーティングシステムを使用せずに、ARMマイクロコントローラ上に小さな組み込みシステムを開発しています。いくつかの異なるタイプの割り込みが発生し(ボタンの押下、AからDへの変換、タイマーなど)、単一のスレッドが実行されます。

処理するイベントのFIFOキューが必要です。ここで、各割り込みサービスルーチンはそのイベントをキューに追加し、メイン(および唯一の)スレッドはイベントをキューから削除して処理します。割り込みサービスルーチンでキューデータ構造に明らかにアクセスすることは危険ですが、メインスレッドにロックがあり、割り込みが発生した場合、ISRはロックを永久に待機するため、スピンロックによってデッドロックが発生します。

もちろん、メインスレッドがキューをいじっている間は割り込みを無効にできることはすでに知っていますが、これは理想的ではありません。

ここに進むための最良の方法は何ですか?

ありがとうA

4

1 に答える 1

0

固定サイズのリング キューを使用できる場合は、複雑なことは何も必要ありません (ISR で割り込みが無効になっていると仮定します)。これは、テール ポインターを更新するリーダー (カーネル スレッド) とライターが 1 つしかないためです。 — ISR — ヘッド ポインタを更新します。それ以外の場合は、 Load Linked/Store Conditional命令を使用してロックフリー キューを実装します。

于 2012-12-24T08:28:13.320 に答える