Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Domanda su interrupt

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Domanda su interrupt

Messaggioda Foto UtenteZazzu » 30 nov 2016, 1:44

Buonasera a tutti, dal basso della mia ignoranza volevo chiedere un chiarimento riguardo gli interrupt. In questo periodo sto giocando un po' con una board stm32 nucleo e mi sono imbattuto negli interrupt. Da quello che ho capito (e verificato) al termine della subroutine richiamata dall'interrupt l'esecuzione del programma riprende da dove era stata abbandonata. La mia domanda è se in qualche modo è possibile far sì che al termine della subroutine il programma ricominci dall'inizio invece che da dove si era fermato. Vi ringrazio in anticipo e chiedo scusa per eventuali bestialità scritte. Buonanotte a tutti.
Avatar utente
Foto UtenteZazzu
10 2
 
Messaggi: 34
Iscritto il: 6 lug 2016, 15:24

1
voti

[2] Re: Domanda su interrupt

Messaggioda Foto Utentexyz » 30 nov 2016, 2:20

Per ritornare all'inizio intendi come se fosse stato appena resettato (power on o premere il tasto di reset se esiste) ?
Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1778
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[3] Re: Domanda su interrupt

Messaggioda Foto UtenteZazzu » 30 nov 2016, 10:28

Più o meno, in realtà preferirei che il codice ricominciasse dalla linea 1 (o da una determinata funzione) perché (corregetemi se sbaglio) il reset andrebbe ad annullare tutti i settaggi che ho fatto sulle periferiche (per esempio un pin impostato a valore logico alto, oppure un onda quadra in uscita comandata dal timer).
Avatar utente
Foto UtenteZazzu
10 2
 
Messaggi: 34
Iscritto il: 6 lug 2016, 15:24

0
voti

[4] Re: Domanda su interrupt

Messaggioda Foto Utenterugweri » 30 nov 2016, 10:36

Per quanto ne so io, non è possibile: l'interrupt in sè non è fatto per ciò che hai in mente.
Piuttosto, a livello di sistema operativo in generale è possibile gestire entro certi limiti i segnali dell'interrupt e prevedere opportune "routine" di rientro... ma non sono sicuro che il tuo caso disponga di un sistema così "evoluto"'.
Avatar utente
Foto Utenterugweri
5.948 2 8 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 1366
Iscritto il: 25 nov 2016, 18:46

2
voti

[5] Re: Domanda su interrupt

Messaggioda Foto Utentexyz » 30 nov 2016, 11:01

Con quasi tutti i micro controllori a 8 bit con un po' di assembler è possibile cambiare l'indirizzo di ritorno di un interrupt. Con gli ARM (compresi i Cortex) hanno un sistema di protezione per impedire giochi strani con gli indirizzi di memoria e poi bisogna tenere conto della ottimizzazione del ARM sugli interrupt annidiati.

Tralasciando la fabbilità e una sua implementazione, pensare di fare una cosa del genere è in generale indice di un pessimo codice non mantenibile.

Consiglio se si vuole comunicare da un interrupt un salto di farlo attraverso una segnalazione (con un meccanismo thread safe) al programma principale (quello interrotto) poi sarà il programma principale a leggere la segnalazione e eseguire il salto.
Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1778
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[6] Re: Domanda su interrupt

Messaggioda Foto UtenteZazzu » 30 nov 2016, 11:10

Ammetto di non aver mai sentito parlare di "thread safe" quindi magari è proprio quello che cercavo e non appena ho mezz'ora libera mi vado ad informare, a questo punto mi chiedo in che modo il microcontrollore gestisce una situazione in cui all'interno della routine di un interrupt viene richiamato un interrupt (anche lo stesso). Esempio banale: un interrupt mi fa entrare in un ciclo che attende l'arrivo di un altro interrupt e così via, a questo punto se la routine degli interrupt non viene mai completata il microcontrollore cosa fa? Continua a memorizzare tutti i punti del codice a cui deve tornare fino a che non esaurisce la memoria e va in crash? Spero di essermi spiegato bene...
Avatar utente
Foto UtenteZazzu
10 2
 
Messaggi: 34
Iscritto il: 6 lug 2016, 15:24

1
voti

[7] Re: Domanda su interrupt

Messaggioda Foto Utenterugweri » 30 nov 2016, 11:35

In verità, l'esecuzione di una routine di interrupt spesso implica il mascheramento di tutti gli altri interrupt (meno un ridotto sottoinsieme "essenziale").

In ogni caso, anche si trovasse un "goto per interrupt", il suo utilizzo sarebbe tutt'altro che consigliabile.

Ribadisco il mio consiglio, che è già stato "rilanciato" da XYZ: verificare cosa il sistema del dispositivo può fare, e muoversi in quella direzione usando segnali, librerie di thread, semafori... ciò che viene messo a disposizione ad "alto livello".
Avatar utente
Foto Utenterugweri
5.948 2 8 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 1366
Iscritto il: 25 nov 2016, 18:46

0
voti

[8] Re: Domanda su interrupt

Messaggioda Foto Utentexyz » 30 nov 2016, 12:16

E' un termine noto a chiunque si sia occupato di programmazione concorrente:

https://it.wikipedia.org/wiki/Thread_safety

E' fondamentale in tutti i sistemi operativi e anche nei micro controllori più semplici (quelli a 8 bit) bisogna scrivere codice che ne tenga conto (compreso chi programma per ARM) se si usa gli interrupt.

L'implementazione del codice si basa nell'eseguire operazioni atomiche su dati condivisi:

https://it.wikipedia.org/wiki/Transazione_atomica

Come implementarlo è una cosa abbastanza difficile a chi è alle prime armi (di solito implica l'uso di assembler direttamente o indirettamente), consiglio di utilizzare librerie o RTOS per il proprio micro controllore utilizzato.
Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1778
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[9] Re: Domanda su interrupt

Messaggioda Foto UtenteZazzu » 30 nov 2016, 12:29

Grazie mille a tutti e 2, mi è rimasto solo un dubbio, ovvero quello che vi avevo chiesto prima:

Zazzu ha scritto:Esempio banale: un interrupt mi fa entrare in un ciclo che attende l'arrivo di un altro interrupt e così via, a questo punto se la routine degli interrupt non viene mai completata il microcontrollore cosa fa? Continua a memorizzare tutti i punti del codice a cui deve tornare fino a che non esaurisce la memoria e va in crash?
Avatar utente
Foto UtenteZazzu
10 2
 
Messaggi: 34
Iscritto il: 6 lug 2016, 15:24

0
voti

[10] Re: Domanda su interrupt

Messaggioda Foto Utenterugweri » 30 nov 2016, 12:59

Zazzu ha scritto:Grazie mille a tutti e 2, mi è rimasto solo un dubbio, ovvero quello che vi avevo chiesto prima


Ti ho già risposto:

rugweri ha scritto:In verità, l'esecuzione di una routine di interrupt spesso implica il mascheramento di tutti gli altri interrupt (meno un ridotto sottoinsieme "essenziale").


E aggiungo che, in particolare, può essere definita una scala di priorità degli interrupt sì che durante l'esecuzione di una certa ISR tutti gli interrupt a priorità più bassa vengano ignorati.
Il mascheramento degli interrupt può essere abilitato in vari modi (se il processore lo consente)... per esempio, nel vecchio Intel 8086 c'era un bit di interrupt enable in un apposito registro.
Avatar utente
Foto Utenterugweri
5.948 2 8 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 1366
Iscritto il: 25 nov 2016, 18:46

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti