Я программирую DSPIC33EP512GM710-I_PT TQFP с использованием MPLABX. Проблема заключается в том, что я генерирую 2 одинаковых прерывания, MPlabX записывает одно и то же имя функции в несколько файлов. c, поэтому компилятор генерирует ошибку, потому что 2 или более функций с одинаковыми имя создано
Вот 2 возможных решения:
Решение-1: Изменить имя прерывания, но тогда я не знаю, будет ли достигнуто прерывание
Решение-2 : Комментируйте все, кроме одной из функций прерывания, и в этом прерывании запрашивайте регистры, чтобы посмотреть, каково было настоящее прерывание
Примечание: я видел сообщение: Что означает __attribute __ ((__ interrupt__, no_auto_psv)) делать? А также руководство: (https://www.mouser.com/datasheet/2/268/MPLAB_XC16_v1_10_C_Compiler_UG_52081-477561.pdf стр. 128)
Но я не знаю, что делает микро, когда достигает прерывания, если оно выглядит последовательно во всех атрибут (( прерывание , no_auto_psv)) коды
Вот мой код, соответствующий решению-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;
}