logo

Forskellen mellem ISR og funktionsopkald

I denne artikel lærer du om forskellen mellem ISR og funktionskald , men før du diskuterer forskellene, skal du kort kende til ISR og funktionskaldet.

funktioner i c

Hvad er ISR?

En afbrydelsesservicerutine (ISR) er en softwarerutine, som hardware påkalder som svar på en afbrydelse. ISR undersøger en interrupt, bestemmer, hvordan den skal håndteres, udfører den og returnerer en logisk interrupt-værdi. Hvis der ikke kræves yderligere håndtering, giver ISR'en besked til kernen med en returværdi. En ISR skal fungere meget hurtigt for at undgå at bremse betjeningen af ​​enheden og driften af ​​alle lavere prioriterede ISR'er.

Selvom en ISR muligvis flytter data fra et CPU-register eller en hardwareport til en hukommelsesbuffer, er den generelt afhængig af en dedikeret interrupt-tråd (eller opgave), kaldet interrupt-service-tråden (IST), til at udføre det meste af den nødvendige behandling. Hvis yderligere behandling er påkrævet, returnerer ISR en logisk afbrydelsesværdi til kernen. Derefter kortlægger den et fysisk afbrydelsesnummer til en logisk afbrydelsesværdi.

Mekanisme for afbrydelseshåndtering

Nedenfor er mekanismen for afbrydelseshåndtering i følgende trin, såsom:

  • En interrupt er en tilstand, der får CPU'en til at suspendere det aktuelle program og udføre en ISR. En ISR er et specielt skrevet program til at servicere den tilstand, der forårsagede afbrydelsen.
  • Efter en afbrydelse er serviceret, vender CPU'en tilbage til hovedprogrammet, nøjagtigt ved den næste instruktion, hvor den forlod.
  • I interrupt-drevet dataoverførsel vil den afbryde CPU'en, når I/O-enheden er klar til dataoverførslen. I ISR'en vil CPU'en udføre dataoverførslen.
  • Denne metode er bedre end polling, fordi CPU'en ikke behøver at spilde tid på at kontrollere status for I/O-enheden. Et tastatur er et godt eksempel på interrupt-drevet I/O-adgang.
  • I stedet for at kontrollere CPU'en, bør tastaturet afbryde CPU'en, når der trykkes på en tast. Der vil således ikke blive spildt tid på gentagne gange at tjekke tastaturet, når brugeren slet ikke skriver.
  • I/O-enheden anmoder om en afbrydelse ved at sende $overline{INTR}$ signal til CPU'en.
  • Når CPU modtager $overline{INTR}$ signal, afslutter den udførelsen af ​​den aktuelle instruktion og udfører derefter ISR'en. Når CPU'en er klar, sender den et kvitteringssignal gennem MENS linje.
  • ISR bliver udført, og CPU'en vender tilbage til hovedprogrammet.
  • I/O-enheder slukker for $overline{INTR}$ signal efter udførelse.
Forskellen mellem ISR og funktionsopkald

For eksempel: I nedenstående eksempel, I/O-overførsel ved afbrydelsesdrevet I/O.

  • Hvis en I/O-enhed, der ønsker at udføre en dataoverførsel med processoren, skal afbryde processoren.
  • En interrupt er en tilstand, der får processoren til at udføre en interrupt service-rutine.
  • I ISR vil processoren udføre dataoverførsel med I/O-enheden.

I dette eksempel skal du afbryde anmodningen ved at trykke på tastaturtasten,

  • I stedet for at processoren tjekker, om der trykkes på en tast, afbryder tastaturet processoren, når der trykkes på en tast.
  • I ISR på tastaturet, som er en del af tastaturdriversoftwaren, vil processoren læse dataene fra tastaturet.
Forskellen mellem ISR og funktionsopkald

Fordele ved ISR

Nedenfor er følgende fordele ved ISR, såsom:

  • Asynkrone ISR-hændelser kan forekomme når som helst under programmets afvikling.
  • ISR gemmer pc'en, flager og registrerer på stakken, deaktiverer alle interrupts og indlæser adressen på ISR'en.
  • ISR kan ikke have argumenter, der kan overføres til den.
  • ISR kan ikke returnere værdier.
  • ISR aktiverer afbrydelserne.
  • Generelt er ISR lille, da det tager en anden process tid.
  • Nogle af ISR har deres egen stack.

Hvad er funktionsopkald?

Et funktionskald kaldes også et subrutinekald. En subrutine er et sæt instruktioner, som programmet kræves gentagne gange. Det er en del af et større program, der har ansvaret for at udføre en konkret opgave. Det større program kan udføre en stor arbejdsbyrde, og subrutinen udfører muligvis blot en simpel opgave, som også er uafhængig af den resterende programkodning.

En funktion er kodet på en sådan måde, at den kan kaldes flere gange og fra forskellige steder (selv fra andre funktioner). Når en funktion kaldes, kan processoren gå til det sted, hvor koden for funktionen befinder sig, og udføre instruktionerne for funktionen én efter én. Efter at have fuldført funktionerne, vender processoren tilbage til præcis, hvor den slap og fortsætter udførelsen fra den næste instruktion.

freddie mercury

Funktioner er et fantastisk værktøj til genbrug af kode. Mange moderne programmeringssprog understøtter funktioner. En samling af funktioner kaldes en bibliotek . Biblioteker bruges ofte som midler til deling og handel med software. I nogle tilfælde kan hele programmet være en sekvens af underrutiner.

I tilfælde af en 8086-processor påkaldes en subrutine af en OPKALD instruktion og kontrol afkast af en RET instruktion. Det reducerer størrelsen af ​​programmet.

Forskellen mellem ISR og funktionsopkald

En funktion skal kaldes eksplicit og er en del af den samme kontekst og udførelsestråd som dens kalder. En hardware ISR kaldes ikke eksplicit, men påkaldes snarere af en ekstern begivenhed. Den aktuelle tråds kontekst bevares automatisk, når et interrupt kaldes, før konteksten skiftes til ISR.

Til gengæld sker den omvendte kontekst-omskiftning, og genopretter processorens tilstand før afbrydelsen, så udførelsen fortsætter fra afbrydelsespunktet. Nedenfor er nogle flere forskelle mellem ISR og funktionskald.

ISR Funktionsopkald
Afbrydelsen initieres sædvanligvis af en intern eller en ekstern signalmikroprocessor i stedet for at udføre instruktioner. ISR udføres efter lagring af programmets aktuelle status i stakken.
ISR udfører forskellige opgaver afhængigt af den afbrudte enhed eller instruktioner skrevet af en programmør.
Funktionskaldet påkaldes ved at udføre instruktioner, som udfører de specifikke opgaver og reducerer programmets størrelse.
Hardwaren bestemmer adressen på ISR.
ISR-adressen er skrevet inde i interrupt-vektortabellen, og ISR-adressen for hver interrupt er fast.
Subrutinens adresse er skrevet inde i instruktionen, som er skrevet inde i hovedprogramkoden.
ISR bruges til alle generelle opgaver. Funktionskald foretages til programspecifikke opgaver.
Når der opstår en afbrydelse under udførelsen af ​​et aktuelt program, udfører processoren derfor ISR efter udførelsen af ​​den aktuelle instruktion. Efter udførelsen af ​​ISR skal processoren genoptage programmet nøjagtigt som før afbrydelsen opstod.
Til dette gemmes pc-indholdet, µP-registre og nogle statusbetingelser. Samlingen af ​​alle statusbitbetingelser i en mikroprocessor kaldes PSW (programstatusord).
  • Under afbrydelsescyklussen skubbes indholdet af pc'en og PSW'en på stakken. Filialadressen for det pågældende interrupt videregives derefter til PC, og en ny PSW indlæses i statusregisteret.
  • Den sidste instruktion i ISR ​​er returneringen fra afbrudt instruktion. Når denne instruktion udføres, bliver den gamle PSW og returadressen hentet fra stakken.
Her er kun en pc gemt på stakken for at få adressen på den næste instruktion i hovedprogrammet.
Subrutinen skal have adgang til data fra den kaldende subrutine og returnere resultater til denne subrutine. Derfor udføres subrutineparametre og datakobling.
Dette kan gøres igennem
  • AC-registret kan bruges til en enkelt indgangsparameter og en enkelt udgangsparameter. I computere med flere processorregistre kan flere parametre overføres på denne måde.
  • En anden måde at sende data til en subrutine på er gennem hukommelsen.