è ammesso un interrupt dentro un interrupt?

11 Anni 11 Mesi fa #1 da StefA
dal main alla pressione di un pulsante su portb "scatta" l'interrupt a bassa priorità, poi vengono chiamate in sequenza varie funzioni. Mi chiedevo se in una di queste io resetto il flag dell'interrupt...poi alla pressione del pulsante su port b, "riscatta" l'interrupt, oppure essendo ancora all'interno del primo interrupt non funziona?
Ammetto che è un po' contorta come cosa..magari con una serata "metallica" in mezzo, domani trovo un altro modo...

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • StefA
  • Avatar di StefA
  • Moderator
  • Moderator
Di più
11 Anni 11 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: è ammesso un interrupt dentro un interrupt?
Nel caso in cui sei a bassa priorita' puoi ancora avere quella ad alta priorita' ma da un modulo o interrupt diverso.

Potresti formalmente riabilitare le interruzioni del modulo resettando il bit IF e riabilitando le interruzioni, ma in questo modo, aprendo la porta a interruzioni annidate puoi facilmente esaurire lo stack e darti la zappa sui piedi.

La cosa migliore e' gestire le interruzioni velocemente e uscire semplicemente settando un flag.
Il main fara' le varie operazioni in base al flag settato.
In questo modo, liberando velocemente le interruzioni (ISR brevi), puoi servire vari sorgenti di interruzioni in poco tempo.

Saluti,

Mauro
Ringraziano per il messaggio: StefA

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
11 Anni 11 Mesi fa #3 da StefA

Nel caso in cui sei a bassa priorita' puoi ancora avere quella ad alta priorita' ma da un modulo o interrupt diverso.

e questo già è implementato.

Potresti formalmente riabilitare le interruzioni del modulo resettando il bit IF e riabilitando le interruzioni, ma in questo modo, aprendo la porta a interruzioni annidate puoi facilmente esaurire lo stack e darti la zappa sui piedi.

il primo interrupt a bassa priorità mi fa entrare in un menù, il secondo dovrebbe farmi entrare in una funzione "bloccante", non necessito di ulteriori livelli, quindi pericolo zappa per il momento è scongiurato! :)
Non mi è chiaro però se gli interrupt annidati, con lo stesso modulo e gli stessi pulsanti, riabilitandolo, funziona (anche se "sbagliato")..perché ho fatto una rapida prova e non scatta l'interrupt...
Thanks.

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • StefA
  • Avatar di StefA
  • Moderator
  • Moderator
Di più
11 Anni 11 Mesi fa #4 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: è ammesso un interrupt dentro un interrupt?
Usare funzioni bloccanti nell'ISR non e' una buona pratica.
Ci sono alcune architetture (ARM per esempio) che supportano il nested interrupt, ma il loro utilizzo complica sempre la vita e il Debug puo' creare disagi.

Ora non vorrei confondermi con gli MSP430, per cui ti rimando a controllare il datasheet, nella relativa sezione.
Quando viene accettata una interruzione viene automaticamente resettato il bit generale delle interruzioni, le quali vengono riabilitate una volta terminata l'ISR.

Per permettere nuove interruzioni, questo e' valido per gli MSP430, devi resettare Interrupt Flag e riabilitare i flag delle interruzioni.

Saluti,

Mauro
Ringraziano per il messaggio: StefA

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
11 Anni 11 Mesi fa #5 da StefA
ok, perfetto, prima di "fare a botte" con il datasheet volevo almeno sapere se c'era una possibilità che funzonasse.
Questo è il mio primo vero progetto con qualche riga di codice in più, per cui ne dovrò fare di strada per migliorare, so perfettamente che "bloccare" dentro un interrupt non è cosa buona e giusta, però almeno in questa prima versione è voluta...cioè se non premi SET nel menù, rimani fermo ad aspettare (e consumare energia :P ), nelle prossime versioni del progetto o sposto il menù fuori dall'interrupt o metto un tempo limite dopo il quale torna al main...vediamo..
Grazie

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • StefA
  • Avatar di StefA
  • Moderator
  • Moderator
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login