TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: giff en 15 de Febrero de 2010, 14:04:05

Título: Duda de sintaxis con declaración variable dentro en un puntero
Publicado por: giff en 15 de Febrero de 2010, 14:04:05
Hola amigos de todopic. Tengo una duda con este código con punteros y funciona pero hay una parte que es en la que todavia no caigo y quiero comprenderlo porque me puede -servir para adaptar otro cógigo. Extraido de una libreria para grabar en eeprom interna de un pic.


Código: [Seleccionar]
void write_int16_eeprom(INT_EEPROM_ADDRESS address, int16 data)
{
   int8 i;

   for(i = 0; i < 2; ++i)
   {
     write_eeprom(address + i, *((int8 *)(&data) + i));
   }
}

Principalmente la sección que no entiendo es la que está dentro del parentesis que engloba a la dirección del puntero:

Código: [Seleccionar]
(int8 *)(&data) + i)
¿como debiera interpretar esto?...quiero conocer mas a fondo a mi amigo uC llevado desde programacion C  :).

Segun entendi del genial tutorial de PalitroqueZ y en contexto a write_eeprom el segundo parametro hace referencia al contenido apuntado en data (tiene una direccion dada) y que se va incrementando para ser guardado.

He buscado en el foro y lo mas cercano es este link (http://www.todopic.com.ar/foros/index.php?topic=25654.msg212811#msg212811). Ojala alguien me ayude ya que es mas para aprender la teoría

si por ejemplo
Código: [Seleccionar]
y=((int8 *)(&data) + i) y entre parentesis esta siendo declarado como puntero
Código: [Seleccionar]
*(y). También se que data fue declarado antes (en el inicio de la función) como un int16 y el registro donde se almacenará la dirección data esta declarado implicitamente por el (int8 *) dentro del parentesis. Entonces sacando cuentas (si esta malo no importa, vendria a ser carril mío jaja pero deseo me corrijan) sería lo mismo decir?:

Código: [Seleccionar]
int16 data;
int8 *y;
int8 i;

   for(i = 0; i < 2; ++i)
   {
     y=(&data)+i;
     write_eeprom(address + i, *y);
   }

Uso CCS 4.104
 
Título: Re: Duda de sintaxis con declaración variable dentro en un puntero
Publicado por: Suky en 15 de Febrero de 2010, 14:30:28
Sí, es lo mismo. Esto funcionaria igual:

Código: C
  1. int8 *y;
  2.  
  3.    y=&data;
  4.      write_eeprom(address++, *y++);
  5.      write_eeprom(address, *y);


Saludos!
Título: Re: Duda de sintaxis con declaración variable dentro en un puntero
Publicado por: giff en 15 de Febrero de 2010, 14:40:34
Muchas gracias Suky por responder. Me siento aliviado por la pronta respusta ;D