¿Cómo pasar una cadena para escribir EEPROM para ATMega32? (en el siguiente código)

¿Cómo podría pasar una cadena para escribir EEPROM primero y leer el código como:

int main() 
{ 
    char display[30];    
    EEPROM_writedata(display); 
    LCD_senddata(0,EEPROM_print(1));//this wont work 
    LCD_senddata(0,display); //this works fine 
    return 1; 
} 

void EEPROM_writedata(char* name) 
{ 
    eeprom_update_block((const void *)name,(void*)1,20);    
}

char* EEPROM_print(int i) 
{ 
    char* send; 
    eeprom_read_block((void*)send,(const void*)1,10); 
    return send; 
} 

LCD_sendata(int, char*) 
{ 
    //codes for LCD initialize upto print 
} 

Puedo tener muchos errores aquí debido a menos conocimiento. Por favor, especifique si los recibe. Mi problema es principalmente pasar una cadena a EEPROM_write() y pasarla a main desde EEPROM_print(). Cualquier ayuda es apreciada.

¿ Qué se obtiene realmente de la impresión eeprom?
Necesito escribir una cadena en la EEPROM y volver a leerla para imprimirla en la pantalla LCD. En realidad, necesito administrar una pequeña base de datos dentro de EEPROM.
Los microcontroladores son muy implacables para los nuevos programadores de C. Le sugiero que simule las bibliotecas AVR en una PC y pruebe su código allí. También puede ser útil repasar tu C, c.learncodethehardway.org
Estoy usando AVRStudio5 para simular avr. ¡Y sí, de verdad! Debería repasar mi c.
@Bishal ¿Qué devuelve exactamente EEPROM_print() para que lo muestre en la pantalla LCD? No qué quieres que devuelva, sino ¿qué devuelve ? ¿Qué es "no funciona" al respecto? ¿Está solo en blanco? ¿Es un galimatías? ¿Qué?
@Majenko Debería devolver bytes leídos de EEPROM.
@JobyTaffey Muchas gracias por el enlace que proporcionó sobre otro tema: mainframe.cx/~ckuethe/avr-c-tutorial/lesson11.c Obtuve mucha ayuda de esto.
@bishal sí, sé lo que debería devolver. Pero, ¿qué estás experimentando al regresar?

Respuestas (2)

Las variables almacenadas en la EEPROM de los AVR en C deben colocarse en la .eepromsección.

( De http://www.nongnu.org/avr-libc/user-manual/group_avr_eeprom.html ) _

#define     EEMEM   __attribute__((section(".eeprom")))
void        eeprom_write_block (const void *__src, void *__dst, size_t __n)

Para almacenar una variable en EEPROM y acceder a ella, desea algo como:

char EEMEM myVar;

void writeMyVal(char c)
{
  eeprom_write_block(&c, &myVar, sizeof(myVar));
}

void readMyVal(char *c)
{
  eeprom_read_block((void*)c, &myVar, sizeof(myVar));
}

Aquí hay un tutorial.

Gracias a todos por su gran ayuda. De hecho, obtuve mi solución de:
http://mainframe.cx/~ckuethe/avr-c-tutorial/lesson11.c Edité el código como

 int main()
 {
 char display[30],write[]="write something inside EEPROM";
 EEPROM_writedata(&write); //initially, EEPROM_writedata(write);
 LCD_senddata(0,EEPROM_print(1));
 LCD_senddata(0,&display); //initially, LCD_senddata(0,display);
 return 1;
 }
Todavía tienes un error que volverá y te morderá en el futuro, incluso si parece funcionar ahora. En su rutina EEPROM_print(), debe inicializar el puntero de envío a la dirección de un búfer que se ha asignado de manera que sobreviva a la finalización de la función.
Absolutamente de acuerdo con @ChrisStratton, debe asignar espacio para char *sendque no sea local para el método. Lea la pregunta y la respuesta aquí: stackoverflow.com/questions/6441218/…