F8: Undantagshantering Undantagshantering i 68 Vad är ett undantag? Typer av undantag Att skriva undantagsrutiner
Undantagshantering, vad och varför? Exempel: Ett system ska mäta temperatur var :e sekund Hur ska processorn veta att det gått sekunder???? Lösning: Skicka en extern signal till processorn var :e sekund Signalen avbryter pågående exekvering, och startar ett program som läser och lagrar temperatur Detta kallas interrupt externa signaler som avbryter ordninarie exekvering så att processorn startat ett annat program (interruptrutin) 68 up Temp. sensor f =. Hz Interrupt är en typ av undantag 2
Undantag (Exception) En händelse (yttre eller inre händelse) som avbryter den normala exekveringen och börjar exekvera en speciell undantagsrutin Kan liknas med ett subrutinanrop fast utan anrop L: MOVE (A)+, D ADD (A)+, D MOVE D, (A2)+ SUBQ #,D7 BNE L Något avbrott SR -> -(SP) PC -> -(SP) ADC: (SP)+ -> PC (SP)+ -> SR MOVE (In_Port), (A3)+ ADDQ #,Count CMPI #2,D RTE 3
När ett undantag inträffar så: Lagras programräknaren (PC) på stacken Utom vid Reset Lagras Status registret på stacken (SR) Utom vid Reset Undantag User mode Supervisor mode RTE (Hämtar PC och SR från stacken) User mode, applikationsprogram Supervisor mode, operativsystemet exekveras i systemmod 4
System states Undantag Normal Användarmod eller systemmod Extern aktivering av RESET signalen Undantag Åter från undantag Halted Systemmod Exception Systemmod Allvarligt undantag, t ex dubbelt bussfel 5
Två orsaker till undantag Yttre händelse Reset signalen aktiveras Busserror Interruptsignalerna aktiveras Inre händelse Division med noll TRAP TRAPV Felaktig instruktion Priviligierad instruktion Adresserror Trace 6
2 Gruppering av undantag Reset Pågående instruktion avbryts och Bus error undantagsrutinen påbörjas inom 2 klockpulser Addresserror Trace Pågående instruktion avslutas. Interrupt Därefter startas undantagshantering Privilige violation Illegal instruction TRAP, TRAPV Vanlig instruktionsexekvering som medför CHK, Div. med att undantagshanteringen startas. 7
Yttre Reset (HALT* och RESET* aktiveras samtidigt) Initierar Stackpekaren med värden från tabell Initierar program räknaren till ett värde som pekar på första instruktionen Nollställer alla register RESET Hämtar värden från tabell till reg SSP och PC SSP Första värdet i stacken PC MOVE #4,D Första instruktionen MOVE #4,D2 8
Busserror BERR* signalen aktiveras Yttre forts. Dvs. något fel uppstod i busscykeln Startar en undantagsrutin Interrupt Någon av de sju kombinationerna på interruptsignalerna (IPL*-IPL2*) aktiveras Inget interrupt Interrupt - Lägst prioritet Interrupt 2 Interrupt 7 - Högst prioritet En prioritetsavkodare används för att driva signalerna IPL*-IPL2* Startar en undantagsrutin 9
Division med noll Inre, t ex Om ett försök till division med noll inträffar i programmet aktiveras detta undantag MOVE #,D DIVU D,D3 En undantagsrutin för division med noll startar TRAP I ett program utförs instruktionen TRAP #x, där x är -5 Undantagsrutin med vektornummer 32+x startas T ex TRAP #4, så startar undantags rutinen med vektornummer 36 Används vanligtvis för operativsystemanrop
Adressering av undantagsrutiner Utifrån vilket undantag som inträffat väljer CPU vilken undantagsrutin som ska exekveras genom att titta i en tabell Tabellen är initialt ALLTID placerad på adress $-$3FF Ex. 6834 kan relokera tabellen till valfri position med VBR Inget utom denna tabell får finnas på dessa adresser SSP vid RESET 4 8 C PC vid RESET Adress till Busserror rutin Adress till Adresserror rutin osv 3FF
Adressering... Programmeraren bestämmer vilken adress som ska lagras i tabellen T.ex.. om följande programkod var den som skulle exekveras när RESET aktiveras så ska: Adress 4 innehålla $ ORG $ START MOVE #3,D BTST.L D,D3 osv När RESET aktiveras kommer processorn att ladda PC med adress $ och börja exekvera MOVE instruktionen 2
Vektortabell Nr. Adress Användning Reset: initiering för SSP 4 Reset: initiering för PC 2 8 Bussfel 3 C Adressfel 4 Illegal instruktion 5 4 Division med noll 6 8 CHK instruktion 7 C TRAPV-instruktion 8 2 Privilige violation 9 24 Trace 28 Emulering 2C Emulering 2-23 3-5F Reserverade 24 6 Falskt avbrott 25-3 64-7F Nivå -7, autovektor 32-47 8-BF TRAP -F 48-63 C-FF Reserverade 64-255 -255 Användarens avbrottsvektor 3
Vektoriserat avbrott :4 Avbrottsnivå IPL-IPL2 FC-FC2 Prioritetsnivå A-A3 AS*,DS* DTACK* Vektor D7-D DS*, AS* I/O-enhet DTACK* PC,SR -(SP) [vektor x 4] PC CPU IACK (SP)+ PC,SR V IRQ Minne I/O enheter En I/O-enhet signalerar till processorn att den behöver hjälp genom signalen Interrupt Request. Om avbrottsnivå > i-i2 i SR eller = 7, så avslutas aktuell instruktion och processorn signalerar samtidigt till I/Oenheten att den accepterar avbrottet Interrupt Acknowledge. I/O-enheten identifierar sig nu genom att skicka en Vektor på databussen. Processorn kvitterar att den fått vektorn och startar sedan utpekad servicerutin Servicerutinen avslutas med RTE. 4
Vektoriserat avbrott 2:4 FC2 FC FC Status Används ej Addr. av data i användarmod Addr. av program i användarmod Används ej Används ej Addr. av data i systemmod Addr. av program i systemmod Avbrottskvittens 5
Vektoriserat avbrott 3:4 6
Vektoriserat avbrott 4:4 7
Auto-vektor-avbrott :2 Avbrottsnivå IPL-IPL2 FC-FC2 Prioritetsnivå A-A3 AS*,DS* Extern logik VPS* DS*, AS* VPS* PC,SR -(SP) [autovektor x 4] PC CPU IACK VPS* (SP)+ PC,SR IRQ Minne I/O enheter En I/O-enhet signalerar till processorn att den behöver hjälp genom signalen Interrupt Request. Om avbrottsnivå > i-i2 i SR eller = 7, så avslutas aktuell instruktion och processorn signalerar samtidigt till I/Oenheten att den accepterar avbrottet Interrupt Acknowledge vilket medför att extern logik omedelbart kvitterar med att aktivera VPS* Processorn kvitterar att den registrerat autovektoravbrott och startar sedan utpekad servicerutin Servicerutinen avslutas med RTE. 8
Auto-vektor-avbrott 2:2 Fördel: Enklare anslutning av avbrott för en periferienhet. 9
Undantagsrutiner En undantagsrutin skrivs på samma sätt som en subrutin I en undantagsrutin är det VIKTIGT att inte påverka registrens innehåll Ex. en undantagsrutin för division med noll Adress $ 4 ska innehålla adressen $4 ORG $4 Div_noll MOVEM.L A/D-D,-(A7) LEA TEXT,A * A ska peka på texten vi vill skriva MOVE.W #3,D * Skriv max 3 tkn CLR.W D * Skriv till LCD skärm TRAP #7 MOVEM.L (A7)+,A/D-D RTE * Hoppa till baka till huvud programmet TEXT DC.B Du får inte dividera med NOLL, 2