Autor Tema: Variables globales en C18  (Leído 4205 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado Maria33

  • PIC12
  • **
  • Mensajes: 54
Variables globales en C18
« en: 02 de Julio de 2009, 08:38:33 »
Hola, estoy programando un pic18f46j11 y tengo una duda a la hora de usar variables globales en mi proyecto.
¿Cual es la diferencia entre la declaración de una variable "Extern" o "Volatile"?
¿Como puedo crear una variable que modificaré en el tratamiento de una interrupción y usaré posteriormente en el código?
Gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Variables globales en C18
« Respuesta #1 en: 02 de Julio de 2009, 11:21:02 »
Extern: La variable declarada pertenece a otro módulo, por lo que no es necesario reservar memoria para ella. Se puede utilizar la variable aunque todavía no halla sido declarada.

Volatile:el contenido de la variable puede cambiar.


En el caso de una variable que se utiliza en una interrupción y después en el resto de código se debe definir como volatile.
No contesto mensajes privados, las consultas en el foro

Desconectado Maria33

  • PIC12
  • **
  • Mensajes: 54
Re: Variables globales en C18
« Respuesta #2 en: 02 de Julio de 2009, 11:31:21 »
Pero entonces, cuando yo declaro una variable como extern si cambia en un módulo, ¿al coger el valor en el módulo contrario tb ha cambiado?

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Variables globales en C18
« Respuesta #3 en: 02 de Julio de 2009, 11:35:45 »
probe de la siguiente manera en C30 que debe ser similar al C18:
necesita utilizar una variable en el main pero dicha variable iba a ser modificada en una libreria incluida en el main, entonces hice asi:


en el archivo principal "main.c" declare como global la variable "henry":
//---------------------------
#include "teclado.h"

int henry;//variable global

main()
{
     henry=1;

     inicializa_teclado();//luego de esta funcion henry=15

     while(1)
     {
          henry++;//henry= 16 y sigue sumando ....
     }
}
//---------------------------


en el archivo "teclado.h" puse lo siguiente
//---------------------------
extern int henry;//declaro el uso de esta variable global en todas las funciones de la libreria teclado.h

void inicializa_teclado(); //inicializa la variable henry=15
void busca_tecla();
//---------------------------


de esta manera la variable "henry" mantiene su valor y es modificable a traves de dichos ficheros y nunca se destruye ni cambia de direccion para ojos del compilador.
« Última modificación: 02 de Julio de 2009, 11:39:37 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Variables globales en C18
« Respuesta #4 en: 02 de Julio de 2009, 13:42:01 »
Al colocar extern, dentro del módulo se puede utilizar, pero en algún otro módulo debe ser declarada para reservar su espacio de memoria. Útil para ser uso eficaz de la memoria y no estar declarando varias variables que tendrán un mismo resultado.
No contesto mensajes privados, las consultas en el foro

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Variables globales en C18
« Respuesta #5 en: 02 de Julio de 2009, 14:53:27 »
Al colocar extern, dentro del módulo se puede utilizar, pero en algún otro módulo debe ser declarada para reservar su espacio de memoria. Útil para ser uso eficaz de la memoria y no estar declarando varias variables que tendrán un mismo resultado.
Suky, tu comentario refiere a algo distinto de lo que expuse? si fuese asi te rogaria un ejemplo para tenerlo más claro. saludos  :-/ :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Variables globales en C18
« Respuesta #6 en: 02 de Julio de 2009, 15:11:50 »
Seria mas o menos asi:

Modulo1.c
Código: C
  1. int Pepe;
  2. ..

Modulo2.c
Código: C
  1. extern int Pepe;
  2. ...

Si otro modulo requiere el uso repetis la declaracion del modulo2, lo que dijo Sulky es que al menos en un modulo tenes que hacer la declaracion formal, como esta en modulo1.c

Saludos !

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Variables globales en C18
« Respuesta #7 en: 02 de Julio de 2009, 15:44:51 »
Exacto, gracias RICHI! :wink:
No contesto mensajes privados, las consultas en el foro

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Variables globales en C18
« Respuesta #8 en: 02 de Julio de 2009, 16:03:16 »
De nada hermano, con respecto a la declaracion volatile, el uso de la misma es para instruir al compilador para que no realize ningun tipo de optimizacion sobre el contexto de la misma, un caso estupido pero clarificador es este:

Código: C
  1. int Pepe;
  2.  
  3. Pepe = 1;
  4. Pepe = 1;
  5. Pepe = 1;


Cualquier compillador normal descarta las dos ultimas asignaciones porque se da cuenta de que son asignaciones repetitivas, ahora si yo cambio por esto:

Código: C
  1. volatile int Pepe;
  2.  
  3. Pepe = 1;
  4. Pepe = 1;
  5. Pepe = 1;


El compilador no optimiza nada y si ven el dissambler veran que las 3 asignaciones son generadas.

Saludos !

P.D.
Si su compilador no descarta las dos ultimas asignaciones del primer ejemplo, entonces descarten al compilador !

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Variables globales en C18
« Respuesta #9 en: 02 de Julio de 2009, 16:22:08 »
P.D.
Si su compilador no descarta las dos ultimas asignaciones del primer ejemplo, entonces descarten al compilador !

jejej asi mismo es caballero, gracias por hacer la aclaración, me falto más orden en mi propuesta pero apuntaba a lo mismo.
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado Maria33

  • PIC12
  • **
  • Mensajes: 54
Re: Variables globales en C18
« Respuesta #10 en: 06 de Julio de 2009, 19:33:15 »
Muchisimas gracias a todos por vuestras explicaciones me ha ayudado a comprender el funcionamiento de las variables globales. Un saludo

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Variables globales en C18
« Respuesta #11 en: 07 de Julio de 2009, 00:06:32 »
Muchisimas gracias a todos por vuestras explicaciones me ha ayudado a comprender el funcionamiento de las variables globales. Un saludo
jejej para cuando lo necesite señorita  :g)
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com


 

anything