Har funderat på hur det blir när det kommer flera interrupt samtidigt.
Ofta kan man hitta exempel så här:
Kod: Markera allt
static void interrupt ISR(void)
{
if (TMR0IE && TMR0IF) // Interrupt från Timer0
{
TMR0IF = 0; // Återställ flagga för Timer0
// gör nåt här
}
else
if (INTE && INTF) // Interrupt från INT-pin
{
INTF = 0;
// gör nåt här
}
else
if (RCIE && RCIF) // Seriellt tecken kommit in
{ // RCIF // Denna bit nollställs genom att läsa RCREG
// gör nåt här
}
}
Det går också att hitta exempel med fristående if-satser så här:
Kod: Markera allt
static void interrupt ISR(void)
{
if (TMR0IE && TMR0IF) // Interrupt från Timer0
{
TMR0IF = 0; // Återställ flagga för Timer0
// gör nåt här
}
if (INTE && INTF) // Interrupt från INT-pin
{
INTF = 0;
// gör nåt här
}
if (RCIE && RCIF) // Seriellt tecken kommit in
{ // RCIF // Denna bit nollställs genom att läsa RCREG
// gör nåt här
}
}
Då borde man kunna ha en slinga som söker av alla aktuella interrupt-flaggor och utför dem, i samma interrupt-anrop. Så här:
Kod: Markera allt
static void interrupt ISR(void)
{
boolean IFfixad = false;
do
{
if (TMR0IE && TMR0IF) // Interrupt från Timer0
{
TMR0IF = 0; // Återställ flagga för Timer0
// gör nåt här
IFfixad = true;
}
if (INTE && INTF) // Interrupt från INT-pin
{
INTF = 0;
// gör nåt här
IFfixad = true;
}
if (RCIE && RCIF) // Seriellt tecken kommit in
{ // RCIF // Denna bit nollställs genom att läsa RCREG
// gör nåt här
IFfixad = true;
}
}
while (IFfixad );
}
Vad sägs ? För och nackdelar ?