Supongo que la familia PIC18F tiene rutinas de servicio de interrupción de alta y baja prioridad, no solo una ISR. Es la primera vez que trato con esto y parece que no puedo hacer que el compilador (XC8) reconozca las dos interrupciones de diferencia de algún código heredado. Básicamente, no sé dónde mirar cuando espero averiguar qué decirle al compilador para marcar estas dos funciones como interrupciones.
#include <xc8.h>
...
__interrupt(high_priority) void MyHighPriorityIsr(void)
{
// stuff
}
__interrupt(low_priority) void MyLowPriorityIsr(void)
{
// stuff
}
Me estoy poniendo:
error: (285) no identifier in declaration
error: (1275) only functions may be qualified "interrupt"
La página 34 de la guía del usuario del compilador parece estar bien, pero recibo errores y no puedo compilar: http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_XC8_C_Compiler_User_Guide.pdf
void low_priority interrupt Low_Priority_Interrupt(void) {
if (TMR1IE && TMR1IF) {
TMR1H = 0xFE;//Pre load for 125 ms
Timer1_Isr();
TMR1IF = 0;
return;
}
}
void high_priority interrupt High_Priority_Interrupt(void) {
if (TX2IE && TX2IF) {
SerialTx_Isr();
TX2IF = 0;
return;
}
if (RC2IE && RC2IF) {
SerialRx_Isr();
RC2IF = 0;
return;
}
}
¿Es posible que no esté declarando sus funciones correctamente?
Más arriba en su código, debe tener las declaraciones:
void __interrupt(high_priority) MyHighPriorityIsr(void);
void __interrupt(low_priority) MyLowPriorityIsr(void);
Luego, más tarde, sus definiciones de función:
void __interrupt(high_priority) MyHighPriorityIsr(void)
{
// stuff
}
void __interrupt(low_priority) MyLowPriorityIsr(void)
{
// stuff
}
Además, observe que "vacío" viene antes __interrupt()
¡Buena suerte!
void interrupt myIsr(void)
a void __interrupt(high_priority) myIsr(void)
y cambiar void interrupt low_priority myLoIsr(void)
a void __interrupt(low_priority) myLoIsr(void)
. Copié y pegué... ¿Me podrían decir cómo se debe hacer? Todavía no he migrado del C18 de Microchip :)
leon heller
mate joven
derlo