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.

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)








instead of
(Anonimo).
ain't
, right?
in lieu of
.
for
arithm.



