logo

Skillnad mellan ISR och funktionsanrop

I den här artikeln kommer du att lära dig om skillnaden mellan ISR och funktionsanrop , men innan du diskuterar skillnaderna måste du känna till ISR och funktionsanrop i korthet.

json data exempel

Vad är ISR?

En avbrottstjänstrutin (ISR) är en mjukvarurutin som hårdvaran anropar som svar på ett avbrott. ISR undersöker ett avbrott, bestämmer hur det ska hanteras, exekverar det och returnerar ett logiskt avbrottsvärde. Om ingen ytterligare hantering krävs, meddelar ISR kärnan med ett returvärde. En ISR måste fungera mycket snabbt för att undvika att bromsa ner driften av enheten och driften av alla lägre prioriterade ISR:er.

Även om en ISR kan flytta data från ett CPU-register eller en hårdvaruport till en minnesbuffert, förlitar den sig i allmänhet på en dedikerad avbrottstråd (eller uppgift), kallad avbrottstjänsttråd (IST), för att göra det mesta av den nödvändiga bearbetningen. Om ytterligare bearbetning krävs returnerar ISR ett logiskt avbrottsvärde till kärnan. Sedan mappar den ett fysiskt avbrottsnummer till ett logiskt avbrottsvärde.

Mekanism för avbrottshantering

Nedan är mekanismen för avbrottshantering i följande steg, till exempel:

  • Ett avbrott är ett tillstånd som gör att CPU:n avbryter det aktuella programmet och exekverar en ISR. En ISR är ett speciellt skrivet program för att serva tillståndet som orsakade avbrottet.
  • Efter att ett avbrott har servats, återgår processorn till huvudprogrammet, exakt vid nästa instruktion där den lämnade.
  • Vid avbrottsdriven dataöverföring, närhelst I/O-enheten är redo för dataöverföring, kommer den att avbryta CPU:n. I ISR kommer CPU:n att utföra dataöverföringen.
  • Denna metod är bättre än polling eftersom CPU:n inte behöver slösa tid på att kontrollera I/O-enhetens status. Ett tangentbord är ett bra exempel på avbrottsdriven I/O-åtkomst.
  • Istället för att kontrollera CPU:n bör tangentbordet avbryta CPU:n när en tangent trycks ned. Tid kommer alltså inte att slösas bort på att upprepade gånger kontrollera tangentbordet när användaren inte skriver alls.
  • I/O-enheten begär ett avbrott genom att skicka $overline{INTR}$ signal till CPU.
  • Närhelst CPU tar emot $overline{INTR}$ signalen, slutför den exekveringen av den aktuella instruktionen och exekverar sedan ISR. När processorn är klar skickar den en kvittenssignal genom MEDAN linje.
  • ISR exekveras och CPU:n återgår till huvudprogrammet.
  • I/O-enheter stänger av $overline{INTR}$ signal efter utförande.
Skillnad mellan ISR och funktionsanrop

Till exempel: I exemplet nedan, I/O-överföring med avbrottsdriven I/O.

  • Om en I/O-enhet som vill utföra en dataöverföring med processorn måste avbryta processorn.
  • Ett avbrott är ett tillstånd som gör att processorn exekverar en avbrottstjänstrutin.
  • I ISR kommer processorn att utföra dataöverföring med I/O-enheten.

I det här exemplet, avbryt begäran genom att trycka på tangentbordet,

  • Istället för att processorn kontrollerar om en tangent trycks ned, avbryter tangentbordet processorn när en tangent trycks ned.
  • I ISR för tangentbordet, som är en del av tangentbordsdrivrutinen, kommer processorn att läsa data från tangentbordet.
Skillnad mellan ISR och funktionsanrop

Fördelar med ISR

Nedan följer följande fördelar med ISR, såsom:

  • Asynkrona ISR-händelser kan inträffa när som helst under programmets körning.
  • ISR sparar datorn, flaggar och registrerar på stacken, inaktiverar alla avbrott och laddar adressen till ISR.
  • ISR kan inte ha argument som kan överföras till den.
  • ISR kan inte returnera värden.
  • ISR aktiverar avbrotten.
  • I allmänhet är ISR liten eftersom det tar en annan process tid.
  • Vissa av ISR har sin egen stack.

Vad är funktionsanrop?

Ett funktionsanrop kallas också ett subrutinsamtal. En subrutin är en uppsättning instruktioner som behövs upprepade gånger av programmet. Det ingår i ett större program som ansvarar för att utföra en specifik uppgift. Det större programmet kan utföra en stor arbetsbelastning, och subrutinen kan bara utföra en enkel uppgift, som också är oberoende av den återstående programkodningen.

En funktion är kodad på ett sådant sätt att den kan anropas flera gånger och från olika ställen (även från andra funktioner). När en funktion anropas kan processorn gå till där koden för funktionen finns och utföra instruktionerna för funktionen en efter en. Efter att ha slutfört funktionerna kommer processorn att återgå till exakt där den slutade och fortsätta exekveringen med början från nästa instruktion.

diana ankudinova

Funktioner är ett utmärkt verktyg för kodåteranvändning. Många moderna programmeringsspråk stödjer funktioner. En samling funktioner kallas a bibliotek . Bibliotek används ofta som medel för delning och handel med programvara. I vissa fall kan hela programmet vara en sekvens av subrutiner.

I fallet med en 8086-processor anropas en subrutin av a RING UPP instruktion, och kontrollera returer av en HÖGER instruktion. Det minskar storleken på programmet.

Skillnad mellan ISR och funktionsanrop

En funktion måste anropas uttryckligen och är en del av samma kontext och exekveringstråd som dess anropare. En hårdvaru-ISR anropas inte explicit utan anropas snarare av någon extern händelse. Den aktuella trådens kontext bevaras automatiskt när ett avbrott anropas innan kontext ändras till ISR.

I gengäld sker den omvända kontextväxlingen, vilket återställer processorns tillstånd före avbrottet så att exekveringen fortsätter från punkten för avbrottet. Nedan finns några fler skillnader mellan ISR och funktionsanrop.

ISR Funktionsanrop
Avbrottet initieras vanligtvis av en intern eller en extern signalmikroprocessor snarare än exekvering av instruktioner. ISR exekveras efter lagring av programmets aktuella status i stacken.
ISR utför olika uppgifter beroende på den avbrutna enheten eller instruktioner skrivna av en programmerare.
Funktionsanropet anropas genom att exekvera instruktioner, som utför de specifika uppgifterna och minskar programmets storlek.
Hårdvaran bestämmer adressen för ISR.
ISR-adressen skrivs inuti avbrottsvektortabellen, och ISR-adressen för varje avbrott är fixerad.
Subrutinens adress skrivs inuti instruktionen, som är skriven i huvudprogramkoden.
ISR används för alla allmänna uppgifter. Funktionsanrop görs för programspecifika uppgifter.
När ett avbrott inträffar under exekveringen av ett aktuellt program, exekverar därför processorn ISR efter exekveringen av den aktuella instruktionen. Efter exekveringen av ISR måste processorn återuppta programmet exakt som innan avbrottet inträffade.
För detta lagras PC-innehållet, µP-register och vissa statusvillkor. Samlingen av alla statusbitvillkor i en mikroprocessor kallas PSW (programstatusord).
  • Under avbrottscykeln skjuts innehållet i PC:n och PSW till stacken. Grenadressen för det specifika avbrottet skickas sedan till PC, och en ny PSW laddas in i statusregistret.
  • Den sista instruktionen i ISR ​​är returen från avbruten instruktion. När denna instruktion exekveras, plockas den gamla PSW och returadressen från stacken.
Här lagras endast en PC i stacken för att få adressen till nästa instruktion i huvudprogrammet.
Subrutinen måste ha tillgång till data från den anropande subrutinen och returnera resultat till den subrutinen. Därför görs subrutinparametrar och datalänkning.
Detta kan göras genom
  • AC-registret kan användas för en enskild ingångsparameter och en enskild utgångsparameter. I datorer med flera processorregister kan fler parametrar skickas på detta sätt.
  • Ett annat sätt att skicka data till en subrutin är genom minnet.