Hej allihopa!
Jag skulle behöva lite hjälp.
Imorrn har jag tenta i mikrodatorteknik (MC68000) och jag hur mycket jag än läser så fattar jag inte riktigt hur det fungerar med avbrottsvektorer.
Har nån lust att lite snabbt förklara hur det funkar med dem. Kan jag bar grunden så fattar jag nog mer sen.
Hur fungerar avbrottsvektorer?
Det är vanligt med olika typer interrupt (avbrott) och olika typer kan ha olika vektorer. Dessa vektorer är adressor så om interrupt#1 aktiveras hämtas vektor#1 adressen som pekar på själva ISR (Interrupt Service Rutinen) som ska köras.
Detta medger att man inte behöver att låta ISR:n kolla:
är det seriell-in-1 ska vi göra såhär:
annars om det är seriell-ut-1 ska vi göra såhär:
osv.
Det finns alltså en självständig programsnutt som hanterar seriell-in-1, en annan som tar hand om seriell-ut-1, en tredje som håller i timern osv.
På alla "större" CPU finns detta i olika tappninger men det är ganska enkelt en tabell över adressorna på de programsnutter som tar hand om de olika interrupt.
Detta medger att man inte behöver att låta ISR:n kolla:
är det seriell-in-1 ska vi göra såhär:
annars om det är seriell-ut-1 ska vi göra såhär:
osv.
Det finns alltså en självständig programsnutt som hanterar seriell-in-1, en annan som tar hand om seriell-ut-1, en tredje som håller i timern osv.
På alla "större" CPU finns detta i olika tappninger men det är ganska enkelt en tabell över adressorna på de programsnutter som tar hand om de olika interrupt.
Vektor tabeller är just tabeller över adressorna på de olika ISR.
Det kan även vara en lista med adressor som man kan indexera i på ett enkelt sätt med en byte eller så, det kan vara som ett led i ett OS:
Call-in-short-form #4 vilket sen tar adress index 4 i en vektortabell och gör det egentliga kall till den adress.
Om du t.ex. har en vektortabell som ser ut såhär:
24 bit adress0
24 bit adress1
24 bit adress2
24 bit adress3
24 bit adress4
24 bit adress5
24 bit adress6
24 bit adress7
vill det ovannämnde kall i själva verket ladda in adress3 som den riktiga adress som kallet utförs till.
Autovektor och vektor får du räkna ut själv, jag kör inte med 68K.
Det kan även vara en lista med adressor som man kan indexera i på ett enkelt sätt med en byte eller så, det kan vara som ett led i ett OS:
Call-in-short-form #4 vilket sen tar adress index 4 i en vektortabell och gör det egentliga kall till den adress.
Om du t.ex. har en vektortabell som ser ut såhär:
24 bit adress0
24 bit adress1
24 bit adress2
24 bit adress3
24 bit adress4
24 bit adress5
24 bit adress6
24 bit adress7
vill det ovannämnde kall i själva verket ladda in adress3 som den riktiga adress som kallet utförs till.
Autovektor och vektor får du räkna ut själv, jag kör inte med 68K.
Det var länge sen jag pillade med 68k, men vad jag minns så är det helt enkelt så att de första X byten i minnet är reserverade till interrupt-vektorerna, som inte är något annat än adresser till den kod som ska köras när interruptet inträffar. Alltså när processorn får en interrupt-signal så läser den ut adressen från vektor-tabellen som motsvarar det interruptet, hoppar till den adressen och börjar köra koden som finns där. Krångligare än så är det inte.
Andra processorer har lite andra lösningar, t.ex. kan det vara så att tabellen kan ligga på valfritt ställe i minnet och en pekare till den skrivs in i något register eller på en bestämd plats i minnet, eller så kan hela tabellen lagras i en uppsättningen register.
Andra processorer har lite andra lösningar, t.ex. kan det vara så att tabellen kan ligga på valfritt ställe i minnet och en pekare till den skrivs in i något register eller på en bestämd plats i minnet, eller så kan hela tabellen lagras i en uppsättningen register.