MPLABX を使用して DSPIC33EP512GM710-I_PT TQFP をプログラミングしています 問題は、MPlabX で 2 つの同様の割り込みを生成することです。MPlabX は複数の .c ファイルに同じ関数名を書き込み、同じ名前の 2 つ以上の関数が作成されるため、コンパイラはエラーを生成します。
考えられる解決策は次の 2 つです。
解決策-1: 割り込み名を変更しますが、割り込みに到達するかどうかわかりません
解決策 2: 割り込み関数の 1 つを除いてすべてコメントし、その割り込みで、実際の割り込みが何であったかを調べるためにレジスタを要求します。
注: 投稿を見ました: What does __attribute__((__interrupt__, no_auto_psv)) do? また、マニュアル: ( https://www.mouser.com/datasheet/2/268/MPLAB_XC16_v1_10_C_Compiler_UG_52081-477561.pdf 128 ページ)
しかし、すべての属性((interrupt、no_auto_psv))コードで順番に見ると、割り込みに達したときにmicroが何をするのかわかりません
ソリューション 2 に対応する私のコードは次のとおりです。
void __attribute__ ( ( interrupt, no_auto_psv ) ) _CM1Interrupt(void)
{
/*
* ************* ALTERADO PARA ACEPTAR OTROS COMPARADORES ************************
// CMP1 callback function
CMP1_CallBack();
// Clear the CEVT bit to enable further interrupts
CMP1_EventStatusReset();
*/
if (CM1CONbits.CEVT)
{
//all up mosfets to 0
aplica_mapa(0,6); //todo a 0
delay_us1(5);
CMP1_EventStatusReset();
}
if (CM2CONbits.CEVT)
{
//all up mosfets to 0
aplica_mapa(1,6);
delay_us1(5);
CMP2_EventStatusReset();
}
if (CM5CONbits.CEVT)
{
//all up mosfets to 0
aplica_mapa(3,6); //todo a 0
delay_us1(5);
CMP5_EventStatusReset();
}
// clear the CMP1 interrupt flag
IFS1bits.CMIF = 0;
}