割り込みの罠

C30には割り込みを記述する為の関数名が用意されています。例えばdsPIC30FのADコンバータ割り込みの場合は _ADCInterrupt です。 この関数を書き間違えて_ADCInterupt とするとどうなるでしょう。 なんと間違えていてもコンパイルエラーになりません。 でも当然意図した通りには動きません。基本的にコンパイラにミスを見つけてもらう期待をしてはいけません。それが罠を避けるコツです。

また、C30内で同じ機能を持つ割り込みでもデバイスによって割り込み関数の名称が違うことがあります。 例えばADコンバータの割り込み関数の名称はdsPIC30Fでは _ADCInterrupt ですが、 PIC24Fでは _ADC1Interrupt です。 もちろんこれも間違えてもコンパイルエラーになりません。だまされないように注意しましょう。

dsPICでは割り込み優先度を0〜7で設定できます。数字が大きい方が優先度が高くなります。ここで優先度を0にするとどうなるでしょう。 なんと割り込みを有効にしてても割り込みが発生しなくなります。 「もともと割り込みの有効、無効が設定できるのだから優先度0で割り込み無効になるはずがない」という考えを持つとMicrochipの思う壺にはまるのです。

Top