Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

10
voti

Definizione di INTERRUPT

Indice

Prime nozioni

Prima cosa, il significato della parola: significa, molto semplicemente, INTERRUZIONE; poteva sembrare ovvio, ma definire ovvie troppe cose porta spesso a prendere delle cantonate catastrofiche.

Esempio pratico

Detto ciò, facciamo subito un esempio di come si svolgono le cose in un VERO "avvenimento-INTERRUPT" durante un processo delicatissimo:
x1) ora di cena, minestrone nel piatto
x2) ci sediamo, un Ringraziamento
x3) "Buon appetito!"
x4) impugno il cucchiaio
1) lo porto nel piatto e lo riempio con il profumatissimo, appetitosissimo fluido meraviglioso,
2) inizio a portarlo verso le labbra, temendo un po' il calore, ma già pregustandolo
........@) [ ...DRIIIIIIIIIIIN (campanello) ]
........A) fermo il movimento del cucchiaio, lo inverto e lo porto nel piatto, attento a non farne cadere.
................a) mi alzo e vado al citofono: "Chi è ?"
................b) "Il signor Catafurgi Aristarco ?"
................c) "No, io sono Catafurgi Eulalio, Aristarco sta nella scala 'E', subito vicino all'ingresso del condominio"

................d) "Grazie, mi scusi e... buona serata"
................e) "Di nulla, buona serata anche a lei!" (Però!, è anche una persona educata...)
................f) torno a sedermi
........B) riprendo il cucchiaio e ricomincio il movimento ascensionale
3) apro le labbra e mi imbocco
4) sento il calore del minestrone sulla lingua, ma ne apprezzo anche il gusto meraviglioso
5) estraggo il cucchiaio, ormai vuoto, dalla bocca
6) torno al punto 1)

Entriamo nei dettagli

Cosa si nota, di particolare, in questa sequenza?I punti "notevoli" sono evidenziati dall'indentamento e dal "modo" di puntare le azioni, vediamo:
- da "x1" a "x4" si fanno una volta sola, all'inizio del programma, pardon: della cena;
- dall' "1" al "6"... (escludendo gli "intermedi") beh, si tratta dell'esecuzione della procedura standard di... nutrimento (!)
- da "a" ad "f" ci sono le istruzioni per gestire l'errore di uno che si è sbagliato a suonare il nostro campanello

E il resto ?

Dividiamo il capello in quattro

C'è una "@", una "A" e una "B"... che inseriti nella sequenza descritta sembra che si debbano ripetere tutte le volte che decido di fare una scorpacciata di verdura mista bollita e condita...
No, seguendo l'indentamento tracciamo due righe verticali: la prima a toccare le lettere maiuscole, l'altra quelle minuscole e vediamo: abbiamo estratto, nella parte più a destra, la routine di gestione "errore-campanello" che potremo utilizzare tutte le volte che squilla ma non desideriamo accogliere nessuno;
se teniamo buone le SOLE istruzioni numerate, quelle più a sinistra, comprese quelle che iniziano con "x", abbiamo il programma "vietato_morire_di_fame.exe" (completo del "forse_ingrassi.com").
Ne sono rimaste fuori tre:
@) arriva un segnale DA FUORI (ma PROPRIO fuori...)
A) salvataggio delle azioni in corso (qui c'era il cucchiaio, ma...)
B) ripristino delle azioni in corso (qui c'era il cucchiaio, quindi...)
Dov'è l'interrupt ?

Bersaglio !

E' la "@" !!!
Ma A) e B) a cosa servono ?
Proviamo ad eliminarli e vediamo alcuni possibili scenari:
- mi alzo e mi porto dietro il cucchiaio ma, siccome mi muovo, mi si rovescia addosso: come mi guarda mia moglie ?
- come sopra,ma si rovescia sul pavimento: come mi guarda mia moglie ?
- come sopra ma sono distratto, lo dimentico vicino al citofono: come faccio a riprendere la scorpacciata ?
Ecco allora a cosa servono queste due istruzioni:
A) "fotografa" la situazione, meglio: la "congela", mentre
B) la "sgela" e tutto riprende come prima (qualcuno ricorda lo scoiattolo di "Era glaciale" ?)


Prime conclusioni

Riassumendo, costruiamo una "struttura" software così concepita:
- il programma che elabora i dati (li prende da qualche parte e li posa da qualche altra, quisquilie...)
- un gruppo di istruzioni dedicate a "congelare" la situazione del programma che POTREBBE essere interrotto
- un "sottoprogramma" ( o "routine" ) STRETTAMENTE dedicata all'evento che può verificarsi all'improvviso
- un gruppo di istruzioni dedicate a "rianimare" la situazione del programma che POTREBBE essere stato interrotto
Notare bene come il programma "principale" sia completamente SLEGATO dalla routine di interrupt: come possono realizzare un qualcosa che funzioni "armonicamente" ? Non possiamo fare altro che prevedere delle variabili di memoria in comune fra loro: uno dei due ci scrive dentro e l'altro legge, facendo attenzione a prevedere anche dei test del tipo "vuoto o pieno" prima di leggere, per non leggere cose "vecchie" e prima di scrivere per non sovrascrivere dati ancora non letti. Ma per queste cose c'è ancora tempo, vedremo qualche stratagemma più avanti.
Come si può vedere, abbiamo semplificato un po' le cose; infatti è molto più semplice occuparci di una cosa alla volta invece di doverne tener d'occhio tre o quattro insieme, vero?
Rimane una domanda: a cosa serve una struttura del genere se devo fare una sola cosa alla volta ?
A poco, è vero, ma ricordate (anche il minestrone di prima) : l'appetito vien mangiando, quindi se avete bisogno, come nel caso del mio plastico, di gestire:
1 - un tastierino 4x4 (attenti al rimbalzo dei contatti...)
2 - un display 4x20 (rispettate le tempistiche !!!)
3 - due potenziometri (... ed i rispettivi convertitori A/D)
4 - due PWM per due treni ( vogliamo che si muovano o no ? )
5 - due invertitori di polarità (l'877 deve sapere in che direzione vanno i treni...)
6 - 12 (DODICI) scambi (con due comandi ciascuno, destra o sinistra)
7 - 9 (NOVE) relé (con due comandi ciascuno, ON o OFF)
penso che, come minimo, vi occorra un sistema "a giro" che dia a ciascuno scopo il tempo necessario per essere raggiunto SE e QUANDO è necessario.

A proposito, facciamo due conti circa il PIC16F877 (che ha 40 pin di cui 33 di I/O):
punto 1: servono 8 pin (4 orizzontali out e 4 verticali input [o viceserva])
punto 2: servono 7 pin (usando il sistema a 4bit la volta e temporizzando il tutto)
punto 3: servono 3 pin (1 per ciascun cursore e u per la 5Vcc di riferimento,= alimentazione, ma è così)
punto 4: servono 4 pin (un output senso orario ed uno antiorario per ciascun motore)
punto 5: servono 4 pin (due per ciascun invertitore: occorre sapere anche se si trovano "in folle", al centro)
punto 6: servono 24 pin (due output per ciascuno scambio)
punto 7: servono 18 pin (due output per ciascun relé)
........totale 68 pin
sembra ne manchino 35, ma con 40 ci sto dentro e me ne avanzerebbe uno per un cicalino di "touch-feed-back" per il tastierino; volete sapere come ho fatto?
Alla prossima !!!

5

Commenti e note

Inserisci un commento

di ,

illuminante!

Rispondi

di ,

non mi piace questo tipo di esempio: descrivere la vita con un programma informatico, è una cosa che trovo estremamente innaturale.

Rispondi

di ,

Bell'articolo, sono curioso di vedere il resto. Se posso solo una osservazione, quando dici: "... 1) lo porto nel piatto e lo riempio con il profumatissimo, appetitosissimo fluido meraviglioso, 2) inizio a portarlo verso le labbra, temendo un po' il calore, ma già pregustandolo ........@) [ ...DRIIIIIIIIIIIN (campanello) ] ........A) fermo il movimento del cucchiaio, lo inverto e lo porto nel piatto, attento a non farne cadere. ..." Non esiste interrupt con così tanta priorità da interrompere il movimento del cucchiaio, avrei considerato quella fase come una fase "atomica" :)

Rispondi

di ,

D'accordo.Ma quanto dobbiamo aspettare per conoscere il restante della questione?La curiosità non è più solo infantile.Un saluto,orlando.

Rispondi

di ,

Dire che questo articolo è bello è dire poco, complimenti ottimo articolo.

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.