- Messaggi: 18
- Ringraziamenti ricevuti 0
Interrupt
5 Anni 8 Mesi fa #1
da sonico
Interrupt è stato creato da sonico
Ciao a tutti, stavo leggendo il capitolo degli interrupt scritto da Mauro, probabilmente mi sfugge qualcosa.
Nel primo esempio in C in cui il main non fa nulla ma si controlla con gli interrupt la pressione del tasto BT4, è scritto che con l'interrupt si evita che il Micro vada a controllare ripetutamente il pin a cui è collegato il pulsante.
Non capisco come ciò avvenga...cioè dal momento che abilito l'interrupt il programma main si trova chiuso nel loop while in cui non fa nulla (oppure è in sleep), come fa quindi ad uscire dal while e svolgere la funzione dell'interrupt? Cioè l'interrupt è a tutti gli effetti una funzione ma nel while non viene mai chiamata, quindi come ci si accorge che il tasto è stato premuto?
Questa è la mia risposta che ho letto altrove: prima di ogni istruzione il micro controlla l'interrupt, se lo trova abilita la funzione associata....ma se è così ciò non equivale a controllare ripetutamente un pin?
Nel primo esempio in C in cui il main non fa nulla ma si controlla con gli interrupt la pressione del tasto BT4, è scritto che con l'interrupt si evita che il Micro vada a controllare ripetutamente il pin a cui è collegato il pulsante.
Non capisco come ciò avvenga...cioè dal momento che abilito l'interrupt il programma main si trova chiuso nel loop while in cui non fa nulla (oppure è in sleep), come fa quindi ad uscire dal while e svolgere la funzione dell'interrupt? Cioè l'interrupt è a tutti gli effetti una funzione ma nel while non viene mai chiamata, quindi come ci si accorge che il tasto è stato premuto?
Questa è la mia risposta che ho letto altrove: prima di ogni istruzione il micro controlla l'interrupt, se lo trova abilita la funzione associata....ma se è così ciò non equivale a controllare ripetutamente un pin?
Si prega Accedi o Crea un account a partecipare alla conversazione.
- sonico
- Autore della discussione
- New Member
Riduci
Di più
5 Anni 8 Mesi fa #2
da firstcolle
Risposta da firstcolle al topic Interrupt
é proprio questo lo scopo dell'interrupt. All'avvenimento di uno qualsiasi degli interrupt il PIC ferma quello che sta facendo, nel tuo caso il loop while vuoto, e salta all'esecuzione del ciclo di gestione degli interrupt.
Diciamo che la chiamata alla funzione interrupt avviene all'avvenimento di un evento di interrupt se abilitato. il tutto in automatico.
Diciamo che la chiamata alla funzione interrupt avviene all'avvenimento di un evento di interrupt se abilitato. il tutto in automatico.
Ringraziano per il messaggio: sonico
Si prega Accedi o Crea un account a partecipare alla conversazione.
- firstcolle
- Platinum Member
Riduci
Di più
- Messaggi: 362
- Ringraziamenti ricevuti 39
5 Anni 8 Mesi fa #3
da sonico
Risposta da sonico al topic Interrupt
mi sfugge proprio la parolina "in automatico" ...quindi l'interrupt se è abilitato non viene chiamato dalle righe del main, però il fatto che qualcuno controlla lo stato degli interrupt non equivale a controllare ripetutamente un pin?
Si prega Accedi o Crea un account a partecipare alla conversazione.
- sonico
- Autore della discussione
- New Member
Riduci
Di più
- Messaggi: 18
- Ringraziamenti ricevuti 0
5 Anni 8 Mesi fa #4
da firstcolle
Risposta da firstcolle al topic Interrupt
esatto.. nel main non controlli nulla.. diciamo che se nel main controlli lo stato del tasto potrebbe essere non premuto 2000 volte e 1 volta premuto e in tal caso esegui determinate operazioni.
con gli interrupt, se il pic va nella gestione interrupt vuol dire che un interrup è avvenuto e quindi controlli quale interrupt ha causato la chiamata, potrebbe anche non essere il tasto premuto ma un altro interrupt, però magari al posto di controllare lo stato del tasto 2000 volte lo controlli solo 20 (a seconda di quanti interrupt avvengono).
tieni anche in considerazione che se hai un main lungo lungo ci vuole del tempo prima che riparta da capo e se hai il controllo del tasto solo all'inizio del main magari non riesci a rilevarlo perchè quando lo premi il programma sta facendo altro. con un interrupt invece vai subito a vedere se è stato premuto il tasto nell'istante in cui lo premi
con gli interrupt, se il pic va nella gestione interrupt vuol dire che un interrup è avvenuto e quindi controlli quale interrupt ha causato la chiamata, potrebbe anche non essere il tasto premuto ma un altro interrupt, però magari al posto di controllare lo stato del tasto 2000 volte lo controlli solo 20 (a seconda di quanti interrupt avvengono).
tieni anche in considerazione che se hai un main lungo lungo ci vuole del tempo prima che riparta da capo e se hai il controllo del tasto solo all'inizio del main magari non riesci a rilevarlo perchè quando lo premi il programma sta facendo altro. con un interrupt invece vai subito a vedere se è stato premuto il tasto nell'istante in cui lo premi
Ringraziano per il messaggio: sonico
Si prega Accedi o Crea un account a partecipare alla conversazione.
- firstcolle
- Platinum Member
Riduci
Di più
- Messaggi: 362
- Ringraziamenti ricevuti 39
5 Anni 8 Mesi fa #5
da Cosimix
Risposta da Cosimix al topic Interrupt
Salve!
Il trucco sta nel fatto che l'interrupt è un meccanismo hardware. Non vai a controllare tramite cicli for o while lo stato di un pin o di un registro. Tramite software decidi quale evento a livello hardware interromperà l'esecuzione del tuo programma. Una volta stabilito questo, il tuo programma eseguirà le istruzioni fin quando, a livello hardware e in modo del tutto asincrono, non avverrà un cambio di stato tale da interrompere l'esecuzione del programma stesso.
Saluti,
Cosimo
Il trucco sta nel fatto che l'interrupt è un meccanismo hardware. Non vai a controllare tramite cicli for o while lo stato di un pin o di un registro. Tramite software decidi quale evento a livello hardware interromperà l'esecuzione del tuo programma. Una volta stabilito questo, il tuo programma eseguirà le istruzioni fin quando, a livello hardware e in modo del tutto asincrono, non avverrà un cambio di stato tale da interrompere l'esecuzione del programma stesso.
Saluti,
Cosimo
Ringraziano per il messaggio: sonico
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Cosimix
- Elite Member
Riduci
Di più
- Messaggi: 198
- Ringraziamenti ricevuti 26
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.