0

stm32 をプログラムし、イベント駆動型アーキテクチャを使用しようとしています。たとえば、タイマー割り込みが発生したときにピンをトグルし、ADC DMA バッファ フル割り込みが発生したときにデータを外部フラッシュに転送します。

それぞれが同じ優先度を持つ複数の割り込みソースがあり、ネスティングが無効になります。

割り込みを使用してフラグを設定し、割り込みが発生したことをメインに通知し、メイン内でデータを処理します。ISR 内に処理/命令はありません。

私を悩ませているのは、メインおよび ISR で変数 (この場合はフラグ) にアクセスすると、長期的には競合状態のバグが発生する可能性があることです。

そのため、フラグの代わりに循環イベント キューを使用したいと考えています。

ISR のみがイベント キュー バッファに書き込み、「ヘッド」をインクリメントできます。メインのみがイベント キューを読み取り (およびイベントに従って命令を実行)、「テール」をインクリメントできます。

ISR のネスティングが無効になっており、各 ISR がイベント キュー配列の異なる要素にアクセスし、メイン関数はイベント キューに新しいイベントがある場合にのみ反応するため、競合状態は回避されますか? または私は何かを逃していますか?

私が何か間違ったことをしている場合は、私を修正してください。

ありがとうございました。

4

1 に答える 1