6
組み込みシステムで割り込みを使用する場合のグローバル変数の回避
グローバル変数を回避する組み込みシステムのために、ISRとプログラムの残りの部分との間の通信を実装する良い方法はありますか? 一般的なパターンは、ISRとプログラムの残りの部分との間で共有され、フラグとして使用されるグローバル変数を持つことですが、このグローバル変数の使用は、粒度に反しています。avr-libcスタイルのISRを使用した簡単な例を含めました。 volatile uint8_t flag; int main() { ... if (flag == 1) { ... } ... } ISR(...) { ... flag = 1; ... } 基本的にスコーピングの問題が何であるかを見逃すことはできません。ISRと残りのプログラムの両方がアクセスできる変数は、必ず本質的にグローバルでなければなりませんか?それにもかかわらず、「グローバル変数はISRとプログラムの残りの部分との間の通信を実装する1つの方法」(強調は私のもの)という言葉に沿って人々が言うことをよく目にします。他の方法がある場合、それらは何ですか?