Diferencia entre revisiones de «volatile»
(→Referencias) |
(→Vea también) |
||
(No se muestran 17 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
== Descripción == | == 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. | + | 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. | 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 [[ | + | Específicamente, el compilador carga la variable de [[SRAM]] 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. | + | |
+ | {{Nota|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. | 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. | ||
Línea 11: | Línea 12: | ||
== Sintaxis == | == Sintaxis == | ||
<pre> | <pre> | ||
− | volatil tipo variable [= valor]; | + | volatil [tipo] variable [= valor]; |
</pre> | </pre> | ||
== Parámetros == | == Parámetros == | ||
− | ;tipo: define el tipo de variable. [[char]], [[byte]], [[int]], [[long]], [[float]], etc | + | ;tipo: define el tipo de variable. [[char]], [[byte]], [[int]], [[long]], [[float]], etc de manera explicita o puede usar un subfijo en valor. |
− | {| class="wikitable" | + | {| class="wikitable col2cen" |
− | |+ | + | |+Subfijos |
!Tipo!!Subfijo!!Ejemplo | !Tipo!!Subfijo!!Ejemplo | ||
|- | |- | ||
Línea 32: | Línea 33: | ||
|} | |} | ||
− | ;variable: nombre de la variable | + | ;variable:nombre de la variable. |
− | ;valor: valor a almacenar en el rango del tipo de dato. | + | ;valor:valor a almacenar en el rango del tipo de dato indicando la '''base''' del dato como prefijo. |
− | {| class="wikitable" | + | {| class="wikitable col2cen" |
− | |+ | + | |+Prefijos |
!Base!!Prefijo!!Comentario!!Ejemplo | !Base!!Prefijo!!Comentario!!Ejemplo | ||
|- | |- | ||
|DEC||ninguno||Dígitos 0~9||123 | |DEC||ninguno||Dígitos 0~9||123 | ||
|- | |- | ||
− | | | + | |HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B |
|- | |- | ||
|OCT||0||digitos 0~7||0173 | |OCT||0||digitos 0~7||0173 | ||
|- | |- | ||
− | | | + | |BIN||B||0 o 1||B1110011 |
|} | |} | ||
Línea 53: | Línea 54: | ||
== Ejemplo 1 == | == Ejemplo 1 == | ||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
− | volatile n = | + | volatile n = 123 //int |
− | volatile n = | + | volatile n = 123U //unsigned int |
− | volatile n = | + | volatile n = 123L //long |
+ | volatile n = 123UL //unsigned long | ||
+ | volatile n = 1.23F //float | ||
volatile byte n = 123; | volatile byte n = 123; | ||
volatile byte n = B1110011; | volatile byte n = B1110011; | ||
Línea 82: | Línea 85: | ||
== Vea también == | == Vea también == | ||
+ | * [[variable publica]] | ||
+ | * [[variable local]] | ||
+ | * [[matriz]] | ||
* [[static]] | * [[static]] | ||
* [[const]] | * [[const]] | ||
+ | * [[extern]] | ||
+ | * [[define|#define]] | ||
+ | * [[Palabras reservadas]] | ||
+ | * [[Comentarios]] - <nowiki>(//)</nowiki> | ||
== Referencias == | == Referencias == |
Revisión actual del 04:31 2 feb 2020
Contenido
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 SRAM 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.
Nota: 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 de manera explicita o puede usar un subfijo en valor.
Tipo | Subfijo | Ejemplo |
---|---|---|
int | ninguno | 123 |
unsigned int | U | 123U |
long | L | 123L |
unsigned long | UL | 123UL |
float | F | 1.23F |
- variable
- nombre de la variable.
- valor
- valor a almacenar en el rango del tipo de dato indicando la base del dato como prefijo.
Base | Prefijo | Comentario | Ejemplo |
---|---|---|---|
DEC | ninguno | Dígitos 0~9 | 123 |
HEX | 0x | dígitos 0~9 + Caracteres A~F | 0x7B |
OCT | 0 | digitos 0~7 | 0173 |
BIN | B | 0 o 1 | B1110011 |
Advertencias
Nada.
Ejemplo 1
volatile n = 123 //int
volatile n = 123U //unsigned int
volatile n = 123L //long
volatile n = 123UL //unsigned long
volatile n = 1.23F //float
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
- variable publica
- variable local
- matriz
- static
- const
- extern
- #define
- Palabras reservadas
- Comentarios - (//)