PIC16F876 e variabili durante interrupt

Jun 30, 2006 5 Replies

Ciao a tutti, non ho ben chiaro una cosa : durante un interrupt i dati contenuti nelle variabili es. "int numero", vanno persi oppure una volta ritornati al programma principale me li ritrovo ancora li ? Uso il linguaggio C (CSS C).



Grazie in anticipo a chiunque. Ciao cl@udio


se la variabile è dichiarata a livello globale e l'interrupt la modifica è chiaro che la modifica permane! se invece dichiari una variabile all'interno di una ISR allora la variabile perde il suo contenuto quando l'interrupt finisce e alla chiamata successiva avrà un valore pseudo-random

non fa differenza, è un concetto che vale per tutti i compilatori

non so se esistano poi direttive specifiche per far si che una variabile dichiarata localmente (in una function) possano mantenere il loro valore tra chiamate successive (pur restando visibili solo localmente) in java mi pare che questa keyword sia STATIC ma non credo esista anche su macchine come i pic ;)

-ice-

"ice" ha scritto nel messaggio news:44a5642b$0$16945$ snipped-for-privacy@reader4.news.tin.it...

La possibilità di definire una variabile come 'static' appartiene al linguaggio non al target. Ora, il fatto che il CCS si possa definire un compilatore, è generalmente ritenuto un eccesso di ottimismo. Quindi, su CCS, non mi esprimo (e, sorry, non ho voglia di consultarmi il manuale che ho qui da qualche parte). Su C18 e C30 puoi, ovviamente, dichiarare una variabile come statica.

Saluti,

simone.bern Mr. Heisemberg is not the only one who can affect a measurement by looking at it (Robert A. Pease) zsimonez.zbernz@zliberoz.it (Rimuovere i caratteri di zorro per rispondere via mail)

...ehmm...scusate la mia ignoranza : per mantenere il valore della variabile devo definire la variabile come statica (es. "static int variabile") sia se e' all' interno della funzione di interrupt sia se si trova prima o all' interno del main() ?

Mille grazie ancora Ciao cl@udio

variabili dichiarate all'esterno di ogni funzione sono 'automaticamente' statiche e visibili da tutte le funzioni ( del modulo ) variabili dichiarate all'interno di una funzione necessitano della keyword 'static' per mantenere ( conservare ) il loro valore tra una chiamata e la successiva.

e' buona norma, se usi variabili condivise tra programma normale e routine d'interrupt, utilizzare per queste variabili la keyword 'volatile', questa keyword costringe il compilatore a ricaricare il valore della variabile nelle variabili temporanee ad ogni accesso, in mancanza di questa keyword il compilatore potrebbe utilizzare un valore memorizzato in un regitro temporaneo e non vedere quindi il valore aggiornato dalla routine d'interrupt.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required