Tengo un problema con algún código de nivel bajo Estoy escribiendo, necesito usar objetos como volátiles, pero no es necesariamente así que quiero que los tipos sean declarados como volátiles (por razones de reutilización). Sin embargo, puedo definir el puntero a una variante calificada de una estructura como se detalla en el siguiente segmento.Semántica volátil en C99
struct x {
int bar;
};
struct x foobar;
...
volatile struct x *foo = &foobar;
Ahora foo es efectivamente un puntero a un objeto del tipo:
volatile struct x {
volatile int x;
};
desde volátil se aplican a todos los miembros de la estructura. Ahora mi pregunta es cuando un objeto contiene un puntero a otro objeto, ¿cómo se aplica la volatilidad?
struct x {
struct y *bar;
};
¿Un puntero a una instancia volátil x continuación, a continuación, tratar esto como:
volatile struct x {
struct y * volatile bar;
};
o como:
volatile struct x {
volatile struct y * volatile bar;
};
He leído a través de la norma C, y se no es muy claro con respecto a esto, y puedo interpretar fácilmente la redacción de múltiples maneras.
http://www.netrino.com/node/80 Parece ser compatible con esa idea. Nunca he leído en volitile. Buen material. – Kieveli
"volátil no son demasiado útiles": no sé sobre el software para PC, pero en los sistemas integrados, son esenciales para declarar registros de hardware o variables que se pueden cambiar en interrupciones. –
Muy buen punto! Han pasado algunos años desde mi último proyecto integrado, así que lo olvidé. De todas formas eso funcionó porque era para cargas y tiendas. En la PC, es fácil olvidarse de la mayoría de las interrupciones a medida que se abstraen mediante la API del sistema operativo. –