MSP430 の ISR を書いています。揮発性 PxIFG レジスタを読み取り、最初の命令でスタック変数にコピーします。ISR ジャンプのオーバーヘッドはありますか、または予想できますか
__interrupt void SW_PRESSED_ISR(void)
{
unsigned short currnet_ifg = P4IFG;
...
}
のようなものにコンパイルする
... Register saving instructions
JSR ... // jump into ISR
LD P4IFG ... // load volatile register P4IFG value
...
ISR ジャンプ後の最初の命令がレジスタ ロードである場合、ISR が意図したとおりに機能することはわかっています。私の理解では、MSP430 は、ジャンプ後に 1 つの命令を保証してから、再び中断することができます。ロードがジャンプ後の最初の命令でない場合、P4IFG レジスタが読み取られる前に再び中断される可能性があり、その値が別の値に変更される可能性があるという問題があります。
コンパイラがそのジャンプの直後にロード命令を配置して、別の割り込みが変更される前に常にそのレジスタのコピーを取得することを期待するのは合理的ですか?
ありがとうございました