TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: black_flowers en 29 de Julio de 2007, 14:05:49

Título: que significa el termino volatile, en las definiciones de variables?
Publicado por: black_flowers en 29 de Julio de 2007, 14:05:49
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.  :-)
Título: Re: que significa el termino volatile, en las definiciones de variables?
Publicado por: omix 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.
Título: Re: que significa el termino volatile, en las definiciones de variables?
Publicado por: black_flowers 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?
Título: Re: que significa el termino volatile, en las definiciones de variables?
Publicado por: omix 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.
Título: Re: que significa el termino volatile, en las definiciones de variables?
Publicado por: black_flowers en 03 de Agosto de 2007, 17:32:19
un saludo, muchas gracias  :-/
Título: Re: que significa el termino volatile, en las definiciones de variables?
Publicado por: BrunoF en 04 de Agosto de 2007, 15:42:33
Omix: Si usás código ajeno acordate de citar la fuente.

Saludos.