Ho un problema con un codice di basso livello che sto scrivendo, ho bisogno di usare oggetti come volatili, ma non è necessariamente così che voglio che i tipi siano dichiarati come volatili (per ragioni di riusabilità). Posso tuttavia definire il puntatore a una variante qualificata di una struttura come dettagliato nel seguente segmento.Semantica volatile in C99
struct x {
int bar;
};
struct x foobar;
...
volatile struct x *foo = &foobar;
Ora foo è effettivamente un puntatore ad un oggetto del tipo:
volatile struct x {
volatile int x;
};
dal volatile, si applicano a tutti i membri struct. Ora la mia domanda è quando un oggetto contiene un puntatore a un altro oggetto, come si applica la volatilità?
struct x {
struct y *bar;
};
Sarà un puntatore a un'istanza volatile x quindi poi trattare questo come:
volatile struct x {
struct y * volatile bar;
};
o come:
volatile struct x {
volatile struct y * volatile bar;
};
Ho letto attraverso lo standard C, ed è non è molto chiaro su questo, e posso facilmente interpretare la formulazione in più modi.
http://www.netrino.com/node/80 Sembra supportare questa idea. Non ho mai letto su volitivo. Roba buona. – Kieveli
"volatile non è troppo utile": non si conosce il software per PC, ma nei sistemi embedded, sono essenziali per la dichiarazione di registri hardware o variabili che possono essere modificati negli interrupt. –
Ottimo punto! Sono passati alcuni anni dal mio ultimo progetto incorporato, quindi l'ho dimenticato. Comunque ha funzionato perché era per carichi e negozi. Sul PC è facile dimenticare la maggior parte degli interrupt mentre vengono sottratti dall'AP del sistema operativo. –