OpenSSM開発中に見つけた ECUや Microchip PIC24F Series に関するバグをメモしておきます。すべて再現性がありますので、参考になると思います
もしかしたら Errataなどに書いてあるかもしれませんが... (^^;
通常は ACC電源をオフにすると ECUと通信できなくなるが、通信したまま ACC電源をオフにすると、ごく希にそのまま ECUと通信できることがある。
再度、エンジンを始動するまでその状態が続く
恐らく ECUのバグ (^^;
低レベル優先度の割り込み関数実行中に上位優先度の割り込み関数が呼ばれると、低レベル優先度の割り込み関数がその後実行されなくなる。この現象は、ほかの割り込み関数でも多発する。
問題を解決するために、割込関数が呼ばれた直後に割込フラグを解除する。
OCxCONに関しては、毎回初期化しないといけない. こっちは仕様!?
void __attribute__((interrupt, auto_psv)) _OC4Interrupt(void) { IFS1bits.OC4IF = 0; CVRCONbits.CVR = dac >> 4; OC4CON = 0b0000000000000001; return; }
void __attribute__((interrupt, auto_psv)) _OC4Interrupt(void) { CVRCONbits.CVR = dac >> 4; OC4CON = 0b0000000000000001; IFS1bits.OC4IF = 0; return; }