Pagina 1 di 5

[INTERRUPT] Info importante per aspiranti microcontrollisti

MessaggioInviato: 11 feb 2015, 11:24
da TardoFreak
Un saluto a tutti i partecipanti,
Troppe volte sto leggendo discussioni nelle quali gli autori postano codice o hanno intenzione di implementare calcoli o elaborazioni importanti all' interno delle interrupt.
Che lo si tenga bene in mente perché era valido 30 anni fa come lo è adesso: all' interno delle ruotines o funzioni di servizio delle interrupt bisogna metterci meno codice possibile, il minimo indispensabile!
Metterci codice in più di quello strettamente necessario nelle gestioni dell' interrupt è sbagliato!
A meno che non ci debba essere una reazione velocissima all' interrupt, le azioni si fanno al di fuori della funzione di servizio. Se basta metterci un codice del genere
Codice: Seleziona tutto
void interrupt(void)
{
  interruptRicevuto = 1;
}

non bisogna metterci altro. Nel ciclo di funzionamento vado, di tanto in tanto, a vedere se quella variabile è a 1 per sapere se ho riceuto un interrupt.
Se usate una linea seriale implementate un buffer e lavorateci sopra nel ciclo principale di funzionamento.
Le eventuali obbiezioni "ma io l' ho fatto e funziona" non sono neanche da pronunciare. "[#]" Funziona magari per un colpo di fortuna, e se non si tratta di fortuna è comunque il modo sbagliato per fare le cose.
Mettere codice che potrebbe stare fuori non fa risparmiare FLASH, tempo o RAM o qualsiasi altra cosa, tutte caz... ehm fesserie. Semplicemente ci si sta per immergere in un mare di guai.
Quindi si devono evitare come la peste calcoli con virgola mobile, cicli interni e menate varie, a meno che tutti i tentativi per far stare queste cose al di fuori non sono misermanente falliti.
In tal caso ci si ritrova costretti a farlo e non è un bel modo di lavorare, si lavora con il terrore di mandare lo stack in overflow o di sovrapporsi con altre funzioni di servizio di altre interrupt. Non è proprio quel che si dice "lavorare serenamente" e ve lo confermo perché io vivo di queste cose, sono più di 20 anni che mi guadagno da vivere scrivendo programmi sui micro.

Ho deciso di scrivere questo post perché in questi giorni sto sviluppando un progetto dove, mio malgrado, debbo fare elaborazioni importanti all' interno di una funzione di gestione dell' interrupt e sto passando l' anima dei guai! Guai talmente grandi che ho dovuto cambiare micro, non ostante stia lavorando su di un 32bit.
Sono dovuto passare ad un modello più veloce, quello a 24MHz che, pur essendo un mostro se confrontato con il più potente degli 8 bit, si è rivelato troppo lento. Sono dovuto passare ad un modello che funziona a 72MHz.

Re: [INTERRUPT] Info importante per aspiranti microcontrolli

MessaggioInviato: 11 feb 2015, 12:16
da gotthard
Per la mia piccolissima esperienza, ho fatto solo un esame di programmazione di microcontrollori, non posso che essere d' accordo con te! :ok:

Ci si complica solo la vita!

Re: [INTERRUPT] Info importante per aspiranti microcontrolli

MessaggioInviato: 11 feb 2015, 12:43
da simo85
Io l'ho fatto e funziona....















































:mrgreen:

Re: [INTERRUPT] Info importante per aspiranti microcontrolli

MessaggioInviato: 11 feb 2015, 13:08
da Ianero
Anche io l'ho fatto e funziona -:-

Re: [INTERRUPT] Info importante per aspiranti microcontrolli

MessaggioInviato: 11 feb 2015, 13:26
da TardoFreak
E vabbè :mrgreen:

Re: [INTERRUPT] Info importante per aspiranti microcontrolli

MessaggioInviato: 11 feb 2015, 13:32
da DirtyDeeds
Uff, basta fare un'enorme routine di interrupt che si attiva al primo interrupt e poi controlla in polling gli interrupt successivi :mrgreen:

Re: [INTERRUPT] Info importante per aspiranti microcontrolli

MessaggioInviato: 11 feb 2015, 16:10
da WALTERmwp
Ah beh, io non uso "routine di interrupt", ma scrivo un pezzettino di programma che viene eseguito quando si verifica un evento predefinito per l'interruzione, però deve essere proprio un pezzettino, piccolo piccolo, altro che "routine di interrupt", ma va la, va ...

Saluti

Re: [INTERRUPT] Info importante per aspiranti microcontrolli

MessaggioInviato: 11 feb 2015, 16:15
da angel99
Se quando entri in interrupt blocchi tutti gli altri interrupt, chettifrega? Hai tutto il tempo che vuoi! :mrgreen:



Ovviamente quoto Freak e aggiungo un metodo che sto sperimentando proprio ora: quando si hanno più interrupt si può utilizzare un contatore per memorizzare il numero di eventi e pushare nello stack l'handler di ogni evento. In pratica nell'interrupt si hanno tre istruzioni

inc
push
reti

mentre nel loop principale, le parti di codice che svolgono le varie operazioni si occupano di poppare lo stack per saper cosa fare e di decrementare il numero di eventi alla fine della loro gestione. Funziona alla grande.

Re: [INTERRUPT] Info importante per aspiranti microcontrolli

MessaggioInviato: 11 feb 2015, 16:19
da speedyant
Al quarto interrupt il micro si schioda dal circuito, si alza sui piedini e ti rincorre per il laboratorio urlandoti in assembler bestemmie non riferibili...

Re: [INTERRUPT] Info importante per aspiranti microcontrolli

MessaggioInviato: 11 feb 2015, 16:22
da angel99
Ma sai che più di una volta ho provato dei sottili sensi di colpa per del codice che ho scritto? Vedere un micro che si intorcola per cercare di seguire ciò che tu imponi ti fa sentire un vero schiavista. :mrgreen: