Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[INTERRUPT] Info importante per aspiranti microcontrollisti

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

9
voti

[1] [INTERRUPT] Info importante per aspiranti microcontrollisti

Messaggioda Foto UtenteTardoFreak » 11 feb 2015, 11:24

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.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

1
voti

[2] Re: [INTERRUPT] Info importante per aspiranti microcontrolli

Messaggioda Foto Utentegotthard » 11 feb 2015, 12:16

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!
...\frac{\mathrm{d} p}{\mathrm{d} t}=JCM... :!:
Avatar utente
Foto Utentegotthard
4.611 2 5 9
Expert EY
Expert EY
 
Messaggi: 1357
Iscritto il: 5 lug 2013, 14:01

1
voti

[3] Re: [INTERRUPT] Info importante per aspiranti microcontrolli

Messaggioda Foto Utentesimo85 » 11 feb 2015, 12:43

Io l'ho fatto e funziona....















































:mrgreen:
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

1
voti

[4] Re: [INTERRUPT] Info importante per aspiranti microcontrolli

Messaggioda Foto UtenteIanero » 11 feb 2015, 13:08

Anche io l'ho fatto e funziona -:-
:shock:
Avatar utente
Foto UtenteIanero
8.069 5 8 13
Master EY
Master EY
 
Messaggi: 4320
Iscritto il: 21 mar 2012, 15:47

1
voti

[5] Re: [INTERRUPT] Info importante per aspiranti microcontrolli

Messaggioda Foto UtenteTardoFreak » 11 feb 2015, 13:26

E vabbè :mrgreen:
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

3
voti

[6] Re: [INTERRUPT] Info importante per aspiranti microcontrolli

Messaggioda Foto UtenteDirtyDeeds » 11 feb 2015, 13:32

Uff, basta fare un'enorme routine di interrupt che si attiva al primo interrupt e poi controlla in polling gli interrupt successivi :mrgreen:
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

1
voti

[7] Re: [INTERRUPT] Info importante per aspiranti microcontrolli

Messaggioda Foto UtenteWALTERmwp » 11 feb 2015, 16:10

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
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

3
voti

[8] Re: [INTERRUPT] Info importante per aspiranti microcontrolli

Messaggioda Foto Utenteangel99 » 11 feb 2015, 16:15

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.
Avatar utente
Foto Utenteangel99
3.516 1 5 11
Master
Master
 
Messaggi: 1148
Iscritto il: 23 gen 2015, 19:39

4
voti

[9] Re: [INTERRUPT] Info importante per aspiranti microcontrolli

Messaggioda Foto Utentespeedyant » 11 feb 2015, 16:19

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...
Son quello delle domande strane!
Avatar utente
Foto Utentespeedyant
5.093 3 6 8
Master
Master
 
Messaggi: 3877
Iscritto il: 9 lug 2013, 18:29
Località: Torino

0
voti

[10] Re: [INTERRUPT] Info importante per aspiranti microcontrolli

Messaggioda Foto Utenteangel99 » 11 feb 2015, 16:22

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:
Avatar utente
Foto Utenteangel99
3.516 1 5 11
Master
Master
 
Messaggi: 1148
Iscritto il: 23 gen 2015, 19:39

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti