En referencia al manual del usuario de XC8 , DS50002053E, sección 2.5.10.3, se indica lo siguiente :
Para compiladores de 8 bits, cambie cualquier aparición del calificador de interrupción por ejemplo, de:
void interrupt low_priority myLoIsr (void)
a lo siguiente:
void __interrupt(low_priority) myLoIsr(void)
Aquí hay un simple código que escribí:
void __interrupt(high_priority) isr_high (void)
{
// IFC
if(INTCON3bits.INT2IF)
{
TMR0 = TMR1 = timerZero; // Reset the IFA and IFB counts
++ifc;
ifa = ifb = 0;
LATEbits.LATE0 ^= 1;
INTCON3bits.INT2IF = 0;
}
}
Y aquí hay un fragmento de código de muestra que el manual XC8 ofrece en la sección 2.5.10.1:
__interrupt(low_priority) void getData (void){
if(TMR0IE && TMR0IF) {
TMR0IF = 0;
++tick_count;
}
}
Lamentablemente no puedo compilar el código. Aquí hay algunos errores relevantes del compilador:
(908) exit status = 1 Minion.c: 215: error: (285) sin identificador en la declaración haga 2 : [build / default / production / Minion.p1] Error 1 crear 1 : * [.build-conf] Error 2 Minion.c: 215: error: (1275) solo las funciones pueden ser calificadas como "interrupción" make: *** [.build-impl] Error 2 Minion.c: 215: error: (372) "," esperado Minion.c: 216: error: (314) ";" esperado *
Ahora, el manual es un poco ambiguo porque el ejemplo de la sección 2.5.10.1 muestra el identificador de la función de interrupción 'vacío' inmediatamente antes del nombre de la función, donde la sección 2.5.10.3 muestra el identificador del vacío inmediatamente antes de interrumpir __. Sin embargo, lo he intentado en ambos sentidos sin alegría.
Alguien más hizo la misma pregunta aquí , pero nunca se respondió a la satisfacción de los OP o la mía.
Si alguien ha desarrollado la sintaxis adecuada para esto, agradecería una parte. Si nadie puede responder, volveré al método que sé que funciona, que se muestra en la sección 5.9.1 del manual.