Autor Tema: [SOLUCIONADO]Dudas a la hora de declarar datos  (Leído 1339 veces)

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

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
[SOLUCIONADO]Dudas a la hora de declarar datos
« en: 24 de Marzo de 2015, 19:58:47 »
Hola a todos, una duda que tengo.

¿Que diferencia hay de declarar una variable o un dato de esta manera?

char variable = 0x00;

¿a declarar este valor de esta manera?

#define variable 0x00

Es que me funciona de las dos maneras, hombre esas variables no va a cambiar el dato, son datos fijos como direcciones de un dispositivo en un bus o direcciones de registros
« Última modificación: 26 de Marzo de 2015, 06:08:54 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Dudas a la hora de declarar datos
« Respuesta #1 en: 24 de Marzo de 2015, 20:10:51 »
Char variable = 0x00;

es un registro de proposito general en el que le podes asignar otros valores, ejemplo podrias hacer en el programa

variable = 0x20;

En cambio el

#define variable 0x00

No es un registro, es solamente una directiva para el compilador. Vos no podrias asignarle un valor a "variable", en realidad no es una variable es una "constante" y el compilador lo reemplaza directamente antes de compilar

Si tene un programa asi:

char x = 0x70 + variable

El compilador lo veria como:

char x = 0x70 + 0x00

Esto es util cuando tenes en varios lugares un mismo valor y si tenes que realizar un cambio seria imposible acordarse todos los lugares donde esta ese valor, entonces definis una constante y usas esa constante en todo el programa, si tenes que cambiarlo solo modificas el #define, por convencion todo lo que se usa con el #define va escrito en mayuscula. Tambien es util para nombrar cosas que seria muy dificil acordarse del valor de cada una ej:

Rutina de inicializacion de un LCD, que funciona para tres tipos.. en la funcion vos escribis initLCD ( LCD_1LINEA ) y funciona

#define LCD_1LINEA  0x03
#define LCD_2LINEAS 0x04
#define LCD_4LINEAS 0x05

switch(aca el char que trae la funcion)
        case LCD_1LINEA:
                    bla bla bla
        case LCD_2LINEAS:
                   bla bla bla
         .........

Y no tenes que acordarte... que 0x03 era una el de LCD_1LINEA

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Dudas a la hora de declarar datos
« Respuesta #2 en: 24 de Marzo de 2015, 20:31:31 »
Ok, lo pregunto porque estoy haciendo un proyecto donde utilizo varios dispositivos en el bus i2c y las direcciones y las direcciones de los registros no cambian pero si que tengo repartido por varias funciones el manejo de esos dispositivos, ¿entonces para estos menesteres sería mejor declarar una constante que una variable?.

yo tenía hecho una variable global y trabajaba con eso.
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Dudas a la hora de declarar datos
« Respuesta #3 en: 24 de Marzo de 2015, 21:04:09 »
Si es algo que no cambia y que podria ser reemplazado por el numero directamente en el programa, podes usar un #define

Y si.. en tu cabecera pondrias algo asi:

#define DIRECCION_I2C_DISPOSITIVO1   0x22
#define DIRECCION_I2C_DISPOSITIVO2   0x33

si por alguna cosa tu direccion cambia solo deberias cambiar esa linea de define.

Y con respecto a los registros es igual... Nomas que mantenes un set de define para todos ( si es que son iguales )

Hay que separar entre:

const char 0x00 ( que si ocupa un lugar de la memoria y lo suele ubicar en la flash )

y el define, como dije pensa el define como algo que el compilador antes de compilar el programa reemplaza esos define por el valor que le diste y recien ahi compila el mismo.
Como una herramienta para facilitar la lectura y la programacion, pero que no involucra en nada los registros del micro.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Dudas a la hora de declarar datos
« Respuesta #4 en: 25 de Marzo de 2015, 05:00:08 »
Entendido, entonces no iba mal encaminado  :D.
Una cosa más, ¿en que sitio sería el apropiado para colocar esos define?, yo pienso que en la cabecera de driver de cada dispositivo al que pertenezca
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Dudas a la hora de declarar datos
« Respuesta #5 en: 25 de Marzo de 2015, 05:37:56 »
en las cabeceras .h

de esa forma los incluis en main al agregar el .h
Volviendo al ejemplo del LCD


lcd.h
Citar
#define LCD_1LINEA  0x03
#define LCD_2LINEAS 0x04
#define LCD_4LINEAS 0x05

initlcd(char valor);
lcd.c

Citar
#include lcd.h

void initlcd(char valor)
{
switch(valor)
        case LCD_1LINEA:
                    bla bla bla
        case LCD_2LINEAS:
                   bla bla bla
         .........
}

main.c

Citar
#include lcd.h

initLCD ( LCD_1LINEA );

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Dudas a la hora de declarar datos
« Respuesta #6 en: 25 de Marzo de 2015, 06:21:42 »
Comprendido  :-/ :-/ :-/, graciassssss ((:-)) ((:-))
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...