Pages: [1]   Go Down
Author Topic: Interrupt annidati  (Read 363 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 9
Posts: 550
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti,
sono ai primi passi coll'arduino..

Avrei una domanda da farvi: nell'arduino posso avere interrupt annidati oppure quando sto eseguendo il codice associato a uno di essi,viene eseguita anche una noInterrupt()?
cioè, se quando sto eseguendo del codice richiamato da un timer o un piedino che ha cambiato livello, ricevo una comunicazione seriale o un altro piedino(di interrupt) varia,cosa succede?
viene ibernato il primo interrupt o viene ignorato il secondo?oppure quando ha terminato il primo viene eseguito il secondo SE e SOLO se è ancora in condizione di interrupt?

grazie per l'attenzione smiley
Logged

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

niente interrupt annidiati, a meno che il segnale non arrivi su un altro pcint (che son 3); in quel casoviene settato un flag e quando terminerà l'interrupt corrente verrà richiamato l'altro.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

E' esattamente come dici tu. Di default gcc compila le routine di gestione degli interrupt per essere "atomiche", ossia non interrompibili da altri interrupt: mette cioè un bel cli() ad inizio routine per disattivare gli altri interrupt, e chiude la routine con un sei() per riattivarli. Quindi durante un interrupt, altri interrupt sono ignorati.
Come ha precisato lesto, esistono dei flag dei registri interni che vengono modificati da un interrupt. Se il micro sta eseguendo un interrupt PCINT (PinChangeINTerrupt) e nel contempo ne arrivano altri, viene settato il flag e memorizzato il pin, ma potrai vedere solo l'ultimo arrivato perché il registro tiene traccia di un solo pin.
Logged


BZ (I)
Online Online
Brattain Member
*****
Karma: 250
Posts: 21207
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La seriale visto che é implementata in HW funziona anche durante gli interrupt.
Ciao Uwe

Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La seriale visto che é implementata in HW funziona anche durante gli interrupt.
Ciao Uwe


Sì, vero. Il mio ragionamento era solo riferito agli interrupt.
Cmq c'è da fare una piccola precisazione: essendo il buffer seriale gestito via software dall'Arduino, la gestione della seriale venga comunque bloccata lato sketch, ossia se un dato è già stato inviato alla periferica del micro, questo verrà spedito, ma se è ancora contenuto nel buffer rimarrà bloccato finché l'interrupt non termina. Così dovrebbe accadere anche in ricezione, vale a dire il trasferimento dalla periferica seriale al buffer software viene fatto da codice. C'è il file "HardwareSerial" del core di Arduino che fa da driver per la seriale HW.
Logged


Pages: [1]   Go Up
Jump to: