5
マイクロコントローラーの割り込み処理とFSMの例
最初の質問 マイクロコントローラでの割り込みの処理について、一般的な質問があります。私はMSP430を使用していますが、質問は他のuCにも当てはまると思います。コードに沿って頻繁に割り込みを有効/無効にするのが良い方法かどうか知りたいのですが。つまり、割り込みの影響を受けないコードの一部がある場合(または、さらに悪いことに、何らかの理由で割り込みをリッスンしてはならない場合)、次のことを行う方がよいでしょう。 クリティカルセクションの前に割り込みを無効にしてから、再度有効にします。 それぞれのISR内にフラグを設定し、(割り込みを無効にする代わりに)クリティカルセクションの前にフラグをfalseに設定し、直後にtrueにリセットします。ISRのコードが実行されないようにするため。 どちらもないので、提案は大歓迎です! 更新:割り込みと状態チャート 具体的な状況をお知らせします。4つのブロックで構成されるステートチャートを実装するとします。 遷移/効果。 終了条件。 エントリー活動。 活動を行う。 これは大学で教授が私たちに教えたものです。おそらく、それを行う最良の方法は、このスキームに従うことではありません。 while(true) { /* Transitions/Effects */ //---------------------------------------------------------------------- next_state = current_state; switch (current_state) { case STATE_A: if(EVENT1) {next_state = STATE_C} if(d == THRESHOLD) {next_state = STATE_D; a++} break; case STATE_B: // transitions and effects break; (...) } /* Exit activity …