¿Cómo declaras que un miembro en particular de una estructura es volátil?En C, ¿cómo declaras que los miembros de una estructura son volátiles?
Respuesta
Exactamente lo mismo que struct
campos no:
#include <stdio.h>
int main (int c, char *v[]) {
struct _a {
int a1;
volatile int a2;
int a3;
} a;
a.a1 = 1;
a.a2 = 2;
a.a3 = 3;
return 0;
}
Se pueden marcar toda la struct
tan volátil utilizando "volatile struct _a {...}"
pero el método anterior es para los campos individuales.
debe ser bastante sencillo de acuerdo con el artículo this:
Por último, si se aplica volátil a una estructura o unión , todo el contenido de la estructura /unión son volátiles. Si no desea este comportamiento, puede aplicar el calificador volátil a los miembros individuales de la estructura/unión .
Solo una advertencia sobre la palabra clave volátil de C/C++.
A menos que sepa lo que está haciendo, nunca debería usarlo.
C/C++ volátil! = Java/C# volátil
volátil no ayuda en el código roscado menos que realmente sepa lo que está haciendo, es necesario utilizar C++ 0x plantilla atómica (o algo similar).
La única vez que he tenido que usar volátiles es cuando controlo registros de hardware.
Si los miembros declarados como volátiles no cambian debido al mantenimiento de alguna interrupción (es decir, un manejador de señal u otra variable atómica cercana), probablemente no se debe usar volátil (ya que la mayoría de los compiladores lo optimizarán si no lo suficientemente cerca).
De lo contrario, como han dicho otros .. sólo lo utilizan a continuación, examinar el asm volcados para ver si su compilador de hecho está de acuerdo con usted :)
En algunos casos, es decir, ciertas versiones de gcc .. su pena comprobar los deshecho.
- 1. C# ThreadStatic + miembros volátiles que no funcionan como se esperaba
- 2. Use doxygen para documentar los miembros de una estructura c fuera de la definición de estructura
- 3. ¿Qué son los modificadores transitorios y volátiles? -
- 4. C++ - ¿Deberían los datos pasados a un hilo ser volátiles?
- 5. visibilidad predeterminada de los miembros de clase/estructura de C++
- 6. ¿Cómo acceder a los miembros de una 'estructura' de acuerdo con un entero variable en C?
- 7. ¿Los miembros de una estructura de C++ están inicializados en 0 de forma predeterminada?
- 8. ¿Declaras que las funciones específicas de tu módulo son estáticas?
- 9. C fread() leyendo mágicamente miembros de estructura asignados dinámicamente, ¿cómo?
- 10. Consecuencia de rendimiento de las funciones de miembros volátiles
- 11. Acceder a los miembros en una estructura de C++ de forma dinámica y estática
- 12. cómo inicializar miembros en Ir estructura
- 13. ¿Con qué frecuencia declaras que tus funciones son const?
- 14. ¿Cómo hacer que los miembros de struct sean privados?
- 15. Uso de volátiles (Thread.VolatileRead/Thread.VolatileWrite) en C#
- 16. Diferencia en volátiles en C# y C
- 17. Obtener la lista de miembros de la estructura C
- 18. ¿Por qué se genera el MetaModel JPA2 con miembros volátiles?
- 19. ¿Cómo son mejores los delegados en C# que los punteros de función en C/C++?
- 20. ¿Cómo declaras las constantes de cadena en C?
- 21. casting una estructura de C en otro
- 22. C: Haciendo una copia profunda de una estructura ... haciendo una copia superficial de una estructura
- 23. Definición de los miembros estáticos en C++
- 24. Semántica de Estructuras Volátiles
- 25. Extraiga los campos de una estructura C
- 26. ¿Cómo declaras las matrices en un encabezado C++?
- 27. ¿Cómo declaras un puntero a una función que devuelve un puntero a una matriz de valores int en C/C++?
- 28. ¿Cómo alinear los nombres de los miembros de la clase C++ en una columna en emacs?
- 29. cómo inicializar una estructura estática en C++?
- 30. de incremento miembros de la estructura
Creo que ha declarado que es un poco más fuerte de lo estrictamente necesario. volátil sí ayuda con el código enhebrado, especialmente en las plataformas integradas de núcleo único. Pero debes saber cómo usarlo. También es efectivamente obligatorio cuando se hace referencia a registros de hardware con o sin DMA, especialmente un registro que se sondeará para conocer el estado. También es necesario comprender su caché y cómo administrarla correctamente, y comprender cómo realizar operaciones atómicas en su plataforma. – RBerteig
Tienes razón. No sabía que estaba pensando cuando dije DMA, me refería a MMIO. He editado la respuesta a algo mejor (espero). –
Según wikipedia (http://en.wikipedia.org/wiki/Volatile_variable), C# parece tener el mismo comportamiento que C/C++, mientras que solo Java tiene una semántica diferente. –