A.6.7 割り込み

割り込み処理の前後では多くのレジスタ退避・回復が発生し、期待する割り込み応答時間を得られない場合があります。その場合は、高速割り込み指定(fint)とfint_registerオプションを利用することで、レジスタの退避・回復を抑えることができ、割り込み応答時間の短縮を図ることができます。

ただし、fint_registerオプションを利用すると他の関数での使用可能なレジスタが減るため、プログラム全体での効率が低下する場合があるのでご注意ください。

【使用例】

改善前ソースコード

#pragma interrupt int_func
volatile int count;
 
void  int_func()
{
        count++;
}

改善前アセンブリ展開コード

_int_func:
          PUSHM R4-R5
          MOV.L #_count,R4
          MOV.L [R4],R5
          ADD #01H,R5
          MOV.L R5,[R4]
          POPM R4-R5
          RTE

改善後ソースコード

#pragma interrupt int_func(fint)
volatile int count;
 
void  int_func()
{
        count++;
}

改善後アセンブリ展開コード

<fint_register=2 オプション指定時>
_int_func:
           MOV.L #_count,R12
           MOV.L [R12],[R13]
           ADD #01H,R13
           MOV.L R13,[R12]
           RTFI