CPU が現在 ISR で実行されているかどうかを開発者が検出できるようにするためのさまざまな方法 (レジスタの読み取りなど) は、さまざまなアーキテクチャで提供される可能性があることを私は知っています。
g_in_isr
しかし、一部の BSP コードでは、CPU が ISR で実行されているかどうかを示すフラグとしてと呼ばれるグローバル変数を使用していることがわかりました。割り込みが発生すると、割り込みハンドラはg_in_isr++
開始時と終了時に操作を実行g_in_isr--
します。
ネストされた割り込みを許可するアーキテクチャでこの方法が安全かどうか疑問に思っています。ほとんどのアーキテクチャでは、g_in_isr++
またはg_in_isr--
アトミック操作ではありません (そうですか?)、既存の割り込みハンドラーがg_in_isr++
操作を行っている間に優先度の高い割り込みが発生した場合はどうなりますか? それは問題を引き起こしませんか?
更新 (2016-03-27)
ええ、アーキテクチャに依存することは知っていますが、一般的なケースを知りたいです。それはアトミックではないと仮定しましょう。g_in_isr++
実際、ほとんどのアーキテクチャではアトミックではありません。もちろん、アトミックにするためにコンパイラの魔法も使用していません。
そのような場合、それは問題を引き起こすでしょうか?