volatile

De ArduWiki
Revisión del 17:25 28 jun 2018 de Kike GL (Discusión | contribuciones) (Ejemplo 1)

Saltar a: navegación, buscar

Descripción

Palabra clave conocida como calificadora. Se usa antes del tipo de datos de una variable, para modificar la manera en que el compilador y el boceto deben tratar dicha variable.

La declaración de una variable volatile es una directiva del compilador. El compilador es un software que traduce el código Arduino en el código de máquina, que son las instrucciones reales para el chip ATmel en el Arduino.

Específicamente, el compilador carga la variable de RAM y no de un registro de almacenamiento, que es una ubicación de memoria temporal donde se almacenan y manipulan las variables del programa. Bajo ciertas condiciones, el valor de una variable almacenada en los registros puede ser inexacto. Una variable debe ser declarada volatile cada vez que su valor pueda ser cambiado por algo más allá del control de la sección de código en la que aparece, como otro código que se ejecuta simultáneamente.

En Arduino, el único lugar que es probable que esto ocurra es en secciones de código asociadas a las interrupciones, que llaman a una rutina de servicio de interrupción.

Sintaxis

volatil tipo variable [= valor];

Parámetros

tipo
define el tipo de variable. char, byte, int, long, float, etc
variable
nombre de la variable
valor
valor a almacenar en el rango del tipo de dato.
Posibles formateadores
Base Formateador Comentario Ejemplo
DEC ninguno Dígitos 0~9 123
BIN B 0 o 1 B1110011
OCT 0 digitos 0~7 0173
HEX 0x dígitos 0~0 y Caracteres A~F 0x7B


Advertencias

Nada.

Ejemplo 1

volatile n = 33U      //unsigned int
volatile n = 9L       //long
volatile n = 32189UL  //unsigned long
volatile byte n = 123;
volatile byte n = B1110011;
volatile byte n = 0173;
volatile byte n = 0x7B;

Ejemplo 2

Conmuta el LED a bordo cuando se pulsa botón. Conectar pulsador entre pin 7 y GND.

volatile bool estado = LOW;

void setup(){
   pinMode(LED_BUILTIN, OUTPUT);
   pinMode(7, INPUT_PULLUP);
   attachInterrupt(0, cambia, CHANGE);
}
void cambia(){
   estado = !estado;
}
void loop(){
   digitalWrite(LED_BUILTIN, estado);
}

Vea también

Referencias