Autor Tema: que significa el termino volatile, en las definiciones de variables?  (Leído 8625 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
hola, q tal. ¿qué significa el termino volatile que se utiliza en los ficheros .h para definir variables como por ejemplo esta?:

extern volatile unsigned int ACCAL __attribute__((__sfr__));

No lo he visto nunca en c, Me imagino que es exclusivo de c30, o no?

1 saludo.  :-)

Desconectado omix

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 244
Re: que significa el termino volatile, en las definiciones de variables?
« Respuesta #1 en: 29 de Julio de 2007, 17:08:59 »
Volatile es una palabra reservada del C, no solo del C30 y su significado es la de indicar que el valor de la variable a la que esta asociado puede cambiar en cualquier momento. De cara al usuario no tiene la mayor relevancia, sin embargo si la tiene para el compilador, por ejemplo sirve para indicarle que su valor puede cambiar por una interrupcion, un proceso en background, E/S, etc. Esto le sirve al compilador para que no "asuma" el valor de dicha variable en un momento dado de la ejecución donde se vea involucrada dicha variable. Por ejemplo, si tenemos el siguiente codigo:

Código: [Seleccionar]

volatile int ticks;         

void timer( ) {  //tarea ejecutada por un proceso externo (ejemplo un timer)
       ticks++;
}

void wait (int interval) { //tarea de espera de x ticks de reloj

  ticks = 0;

  while (ticks < interval); 

}


Si el compilador es lo suficientemente bueno no deberia de cargar la variable ticks dentro de la rutina de comprobación del while, pues sabe que no se cambia su valor internamente, y si lo hiciese podria provocar una ejecución incorrecta del programa.

Un saludo y espero haber aclarado tu duda.

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
Re: que significa el termino volatile, en las definiciones de variables?
« Respuesta #2 en: 29 de Julio de 2007, 19:41:18 »
no se si lo he entendido bien, pero me suena algo a las variables compartidas entre procesos o entre rutinas de interrupción. Recuerdo que para utilizar este tipo de variables se utilizaba un semáforo para bloquear el acceso a dicha variable mientras estaba siendo modificada. ¿Tiene relación con eso?

Desconectado omix

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 244
Re: que significa el termino volatile, en las definiciones de variables?
« Respuesta #3 en: 30 de Julio de 2007, 12:53:06 »
si se puede ver de ese modo, pero basicamente es una variable que se puede modificar por un proceso externo ajeno al compilador. Con lo cual al añadirle el volatile, lo que hace el compilador es no optimizar los accesos a dicha varible, tener precaución adicional a la hora de restaurar la pila, etc. Normalmente los registros por ejemplo de un puerto de un PIC se suelen declarar de esa forma, ya que su valor puede no depender de la ejecución del programa, sino de un cambio de estado en una entrada por ejemplo.

Saludos.

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
Re: que significa el termino volatile, en las definiciones de variables?
« Respuesta #4 en: 03 de Agosto de 2007, 17:32:19 »
un saludo, muchas gracias  :-/

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: que significa el termino volatile, en las definiciones de variables?
« Respuesta #5 en: 04 de Agosto de 2007, 15:42:33 »
Omix: Si usás código ajeno acordate de citar la fuente.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.