Newsgroup: it.hobby.elettronica.digitale
Titolo: a proposito di interrupt

Salve!
CHe ne pensate nell' uso da parte di un compilatore C dell' uso della 
vettorizazione per creare interrupt in micro che nativamente non supportano 
questo? 

diego:

Che rallenti l'esecuzione (un jump è relativamente lunghetto) in una
sezione critica per ottenere poi cosa?

"F. Bertolazzi"  ha scritto nel messaggio:

In verita' non lo so, ho visto che il compilatore CCS per micro della 
Microchip usa questa tecnica e volevo capire il perche' visto che i micro 
non supportano questo modo, forse facendo cosi' si possono usare piu' 
interrupt contemporaneamente? 

 sezione critica per ottenere poi cosa?
Un JUMP impiega 2 cicli macchina anzichè 1... Sai che roba. 
-- 
Error-Disk Full Error, Formatting Drive C: to make space 
News 2002 [v 2.3] / StopDialer / PopDuster - 
http://www.socket2000.com
Akapulce portal: 
http://www.akapulce.net

 interrupt contemporaneamente? 
Gli interrupt hanno una priorita' solo nelle serie 
Hi-End(Pic 18-24, DsPic) e non ne hanno nelle low e middle 
(Pic 12-16xxx).
I pic discernono la causa dell'interrupt solamente tramite i 
flag relativi.
La richiesta di interrupt, di qualsiasi interrupt, nella 
serie low-end, viene servita tramite le funzioni situate a 0x04.
Gli interrupt sono attivati solo via hardware ed e' 
esplicitamente proibito richiamare le funzioni di interrupt 
da programma!
Non avendo capito quali siano le tue perplessita', ho 
scritto un po' di informazioni che reputo possano esserti 
utili visti che ti dichiari "un principiante".:-)
ciao
Angelo

 ciao
Nella programmazione in C sono principiante e non mi vergogno a dirlo :-) 
piu' che perplessita' vorrei capire certe cose, in effetti volevo sapere 
perche' se un micro non supporta  le ISR vettorizzate "cioe' si possono 
specificare piu' interrupt" il compilatore nel mio caso CCS pensa a trattare 
le interruzioni come se fossero vettorizzate, quali sono i pro e icontro di 
questa virtualizzazione 

 questa virtualizzazione 
Se il micro non supporta le isr vettorizzate, non esiste un 
modo diverso di trattare gli interrupt; l'interrupt e' una 
situazione che l'hardware riconosce agendo di conseguenza; 
nel caso del pic low-end viene inserito nell'indirizzo della 
prossima istruzione da eseguire, dopo alcune vicissitudini 
che non sto ad approfondire, il vettore di interrupt, che e' 
univoco e unico!
A questo punto, non rimane che capire, tramite i vari flag 
disponibili, quali sono la/le azione/i da eseguire, 
eseguirla/e, ripristinare i valori antecedenti il salto al 
vettore di interrupt (vicissitudini riportate 
precedentemente) e riprendere il normale flusso del programma.
Una differenza sostanziale, ma non so dirti quanto 
indispensabile, che c'e' con i micro che dispongono di 
interrupt vettorizzati, e' che questi ultimi saltano 
direttamente al vettore di interrupt e possono fare a meno 
di controllare, in alcuni casi, i flag in quanto la causa 
scatenante fornisce gia', tramite il vettore di interrupt 
collegato, la propria ragione d' essere.
Per farti un esempio, usando un Avr AtMega, esiste un 
vettore di interrupt collegato alla periferica I2c; una 
volta che hai attivato la periferica come, poniamo, slave e 
hai fornito un indirizzo, al momento che dopo uno start 
viene rilevato l'indirizzo slave in transito sul bus I2c, il 
micro abbandona la funzione che sta eseguendo, salva un po' 
di roba sullo stack e va ad eseguire la funzione che tu hai 
provveduto a scrivere in memoria a partire dal vettore di 
interrupt dell'I2c (0x20, Atmel per motivi di copyright 
chiama l'I2c TWI, ovvero Two Wire Serial Interface).
Una volta eseguita la funzione di interrupt, riprende i dati 
salvati, fra i quali c'e' sicuramente anche il program 
counter che punta all'istruzione che il micro avrebbe dovuto 
eseguire qualora non ci fosse stato l'interrupt, e riprende 
il flusso del programma dal punto seguente a dove era stato 
interrotto.
Il pic fa' le stesse cose, ma invece di saltare al vettore 
di interrupt dell'I2c, salta al vettore di interrupt che e' 
unico, rileva tramite i flag quale o quali delle funzioni 
scritte deve eseguire, le esegue, ripristina i dati e 
riprende il flusso da dove lo aveva interrotto.
Molto probabilmente le cose che ho scritto gia' le sapevi e 
accetterai il buon cuore...
ciao
Angelo