Autor Tema: Problema con lectura de cadena en eeprom externa (con punteros)  (Leído 1319 veces)

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

Desconectado gonzalonalbandian

  • PIC10
  • *
  • Mensajes: 7
Problema con lectura de cadena en eeprom externa (con punteros)
« en: 15 de Noviembre de 2012, 20:23:46 »
Saludos a todos. Estoy realizando una libreria para una eeprom i2c. Tengo todas las funciones creadas y funcionando perfectamente exepto la de leer una cadena de bytes. No me explico que puede ser pero al simularlo solo me toma el primer caracter, y no es un problema de lectura propiamente dicho sino mas bien un problema de punteros o del propio compilador. Para simplificar la cuestion hago un ejemplo limpio sin las rutinas de eeprom propiamente dichas.
Todo esto esta compilado en Hi-Tech PICC 18 en un PIC18F4520.

Código: [Seleccionar]
void leer_cadena(char addr_mem, int pointer_addr, int *buffer, char cant_bytes)
{
for(char cnt = 0; cnt < cant_bytes; cnt++)
{
*buffer = cnt + 0x30; // convierto cnt en su valor pero en ascii para poder imprimir con printf %s como si fuera un string
buffer++;
}
return;
}

void main ()
{
char buffer[10];

leer_cadena(0xA0,0x00,&buf,10); // direccion de memoria, posicion en memoria, direccion de memoria del buffer, cantidad de bytes a leer
printf(">>Texto leido: %s",buf);

return;
}

En el simulador la salida seria la siguiente:
>>Texto: 0

cuando en realidad deberia ser
>>Texto: 0123456789

A alguien se le ocurre alguna idea con respecto al motivo de esta falla?
Muchas gracias!

Gonzalo
« Última modificación: 15 de Noviembre de 2012, 20:40:41 por gonzalonalbandian »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Problema con lectura de cadena en eeprom externa (con punteros)
« Respuesta #1 en: 15 de Noviembre de 2012, 20:46:28 »
Estás definiendo mal los tipos.

(char addr_mem, int pointer_addr, int *buffer, char cant_bytes)

Fijate que declarás buffer como un int. un int es de 16 o 32 bits, dependiendo el compilador.

Es importante definir bien el tipo de puntero, sino cuando haces por ejemplo:

buffer++;

en lugar de recorrer la memoria byte a byte, la vas a recorrer de a 2(16 bits) o 4(32 bits) en cada incremento.

Si el puntero apunta a chars, tiene que ser de tipo char, no int.

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.

Desconectado gonzalonalbandian

  • PIC10
  • *
  • Mensajes: 7
Re: Problema con lectura de cadena en eeprom externa (con punteros)
« Respuesta #2 en: 15 de Noviembre de 2012, 21:32:32 »
Estás definiendo mal los tipos.

(char addr_mem, int pointer_addr, int *buffer, char cant_bytes)

Fijate que declarás buffer como un int. un int es de 16 o 32 bits, dependiendo el compilador.

Es importante definir bien el tipo de puntero, sino cuando haces por ejemplo:

buffer++;

en lugar de recorrer la memoria byte a byte, la vas a recorrer de a 2(16 bits) o 4(32 bits) en cada incremento.

Si el puntero apunta a chars, tiene que ser de tipo char, no int.

Saludos


Era tan simple como ese pequelo detaller. Muchisimas gracias!