Ich denke, die PIC18F-Familie hat Interrupt-Service-Routinen mit hoher und niedriger Priorität, nicht nur eine ISR. Ich beschäftige mich zum ersten Mal damit und ich kann den Compiler (XC8) anscheinend nicht dazu bringen, die beiden unterschiedlichen Interrupts aus einem älteren Code zu erkennen. Grundsätzlich weiß ich nicht, wo ich suchen soll, wenn ich hoffe, herauszufinden, was ich dem Compiler sagen soll, um diese beiden Funktionen als Interrupts zu markieren?
#include <xc8.h>
...
__interrupt(high_priority) void MyHighPriorityIsr(void)
{
// stuff
}
__interrupt(low_priority) void MyLowPriorityIsr(void)
{
// stuff
}
Ich erhalte:
error: (285) no identifier in declaration
error: (1275) only functions may be qualified "interrupt"
Auf Seite 34 des Benutzerhandbuchs des Compilers scheint es in Ordnung zu sein, aber ich erhalte Fehler und kann nicht kompilieren: 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;
}
}
Ist es möglich, dass Sie Ihre Funktionen nicht richtig deklarieren?
Weiter oben in Ihrem Code sollten Sie die Deklarationen haben:
void __interrupt(high_priority) MyHighPriorityIsr(void);
void __interrupt(low_priority) MyLowPriorityIsr(void);
Dann später Ihre Funktionsdefinitionen:
void __interrupt(high_priority) MyHighPriorityIsr(void)
{
// stuff
}
void __interrupt(low_priority) MyLowPriorityIsr(void)
{
// stuff
}
Beachten Sie auch, dass "void" vor kommt __interrupt()
Viel Glück!
void interrupt myIsr(void)
zu void __interrupt(high_priority) myIsr(void)
und der Wechsel void interrupt low_priority myLoIsr(void)
zu void __interrupt(low_priority) myLoIsr(void)
. Ich habe kopiert und eingefügt ... Können Sie mir sagen, wie es gemacht werden sollte? Ich bin noch nicht von Microchips C18 migriert :)
Leon Heller
Matt Jung
derlo