1 / 20

ALTERAZIONE RISPOSTE STANDARD AGLI INTERRUPT

ALTERAZIONE RISPOSTE STANDARD AGLI INTERRUPT. Prof. Marco Solarino. C OSA SIGNIFICA?. Alterare la risposta standard di un interrupt significa operare affinché il sistema reagisca a tale interrupt in maniera diversa da come previsto normalmente. ESEMPI.

kaori
Download Presentation

ALTERAZIONE RISPOSTE STANDARD AGLI INTERRUPT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ALTERAZIONE RISPOSTE STANDARD AGLI INTERRUPT Prof. Marco Solarino

  2. C OSA SIGNIFICA? Alterare la risposta standard di un interrupt significa operare affinché il sistema reagisca a tale interrupt in maniera diversa da come previsto normalmente.

  3. ESEMPI • Premendo un tasto della tastiera viene richiesto un interrupt la cui risposta standard porterà all'acquisizione del valore del tasto premuto. Si potrebbe volere: • che al posto dell'acquisizione del valore del carattere venga emessa una nota musicale; • che prima dell'acquisizione del valore del carattere venga emesso un bip.

  4. TIPI DI ALTERAZIONI Nel primo dei casi precedenti parleremo di SOSTITUZIONI, mentre nel secondo useremo il termine MODIFICHE.

  5. SOSTITUZIONI Nelle operazioni di sostituzione la vecchia ISR sarà del tutto abbandonata, sostituita dalla nuova scritta da noi. NuovaISR ........... ........... ........... ........... ........... IRET VecchiaISR ........... ........... ........... ........... ........... IRET

  6. MODIFICHE Nelle operazioni di modifica la vecchia ISR sarà ancora utilizzata dopo l'esecuzione della nuova, richiamata da quest'ultima. NuovaISR ........... ........... ........... ........... Call VecchiaISR VecchiaISR ........... ........... ........... ........... ........... IRET

  7. C OME SI FA? Bisogna innanzitutto scrivere la nuova ISR, e poi fare in modo che il suo indirizzo venga registrato nella IVT alla posizione opportuna. Questo si ottiene inserendo la nostra ISR all'interno di un sorgente (per esempio in C++) come se fosse una comune funzione, e ci sarà un main che si occuperà dell'intervento sulla IVT.

  8. ATTENZIONE! Nel main non dovrà essere presente nessuna chiamata alla ISR. Ricordiamoci che l'attivazione di quest'ultima non avviene per chiamata software come per le normali funzioni, ma via hardware a seguito della richiesta di una periferica.

  9. DURATA DELL'ALTERAZIONE TEMPORANEA: l'alterazione opera solo fino alla chiusura del main che la ha attivata, e dopo torna in funzione la risposta standard. PERMANENTE: l'alterazione rimane in funzione anche dopo la chiusura del main che la ha attivata, e per far tornare in funzione la risposta standard si deve riavviare il computer.

  10. RIASSUMENDO TEMPORANEE ALTERAZIONI PERMANENTI In definitiva possiamo avere quattro tipi di alterazioni: MODIFICHE TEMPORANEE MODIFICHE PERMANENTI SOSTITUZIONI TEMPORANEE SOSTITUZIONI PERMANENTI MODIFICHE SOSTITUZIONI

  11. COSA SI FA NELLA IVT Essenzialmente due cose: Si scrive dentro un suo elemento per inserire l'indirizzo della nostra ISR Si legge da un suo elemento l'indirizzo di una ISR esistente

  12. COME SCRIVO NELLA IVT? Nel TurboC++ esiste la funzione setvect che, utilizzando due parametri, consente di scrivere nella IVT. Il primo parametro è il numero di interrupt che individua l'elemento della IVT in cui scrivere; il secondo è proprio l'indirizzo della ISR da inserire in quella posizione.

  13. SETVECT void setvect(int NN, void interrupt(*ISR)()); Numero dell'interrupt Indirizzo (nome) della ISR NuovoInt0 #include<dos.h> void interrupt NuovoInt0(...); void main() { . setvect(0,NuovoInt0); . }

  14. COME LEGGO DALLA IVT? Nel TurboC++ esiste la funzione getvect che, utilizzando un parametro, consente di leggere dalla IVT restituendo un valore. Il parametro è il numero di interrupt che individua l'elemento della IVT da cui leggere; il valore restituito è proprio l'indirizzo della ISR registrato in quella posizione.

  15. GETVECT void interrupt (*getvect(int NN))(); Numero dell'interrupt #include<dos.h> void interrupt (*VecchioInt0)(...); void main() { . VecchioInt0=getvect(0); . }

  16. AZIONI DEL main() A seconda del tipo di alterazione da apportare, oltre all'inserimento dell'indirizzo della nuova ISR nella IVT sarà necessario a volte salvare il vecchio indirizzo. Nelle operazioni temporanee ciò serve per ripristinarlo alla fine del nostro programma, mentre nelle modifiche il vecchio indirizzo ci serve per richiamare la vecchia ISR al termine della nuova.

  17. MODIFICHE TEMPORANEE #include<dos.h> void interrupt NuovoInt0(...); void interrupt (*VecchioInt0)(...); void main() { VecchioInt0=getvect(0); setvect(0,NuovoInt0); . . . setvect(0,VecchioInt0); } ...e la ISR NuovoInt0()si deveconcludere con la chiamata VecchioInt0().

  18. MODIFICHE PERMANENTI #include<dos.h> void interrupt NuovoInt0(...); void interrupt (*VecchioInt0)(...); void main() { VecchioInt0=getvect(0); setvect(0,NuovoInt0); . . } ...e la ISR NuovoInt0()si deveconcludere con la chiamata VecchioInt0().

  19. SOSTITUZIONI TEMPORANEE #include<dos.h> void interrupt NuovoInt0(...); void interrupt (*VecchioInt0)(...); void main() { VecchioInt0=getvect(0); setvect(0,NuovoInt0); . . . setvect(0,VecchioInt0); } ...e la ISR NuovoInt0()non deve contenere la chiamata VecchioInt0().

  20. SOSTITUZIONI PERMANENTI #include<dos.h> void interrupt NuovoInt0(...); void interrupt (*VecchioInt0)(...); void main() { VecchioInt0=getvect(0); setvect(0,NuovoInt0); . . } ...e la ISR NuovoInt0()non devecontenere la chiamata VecchioInt0().

More Related