Wie übergebe ich eine Zeichenfolge für das EEPROM-Schreiben für ATMega32? (im folgenden Code)

Wie könnte ich zuerst eine Zeichenfolge für das EEPROM-Schreiben übergeben und den Code wie folgt einlesen:

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 
} 

Ich kann hier viele Fehler machen, weil ich weniger Wissen habe. Bitte geben Sie an, ob Sie sie erhalten. Mein Problem besteht hauptsächlich darin, eine Zeichenfolge an EEPROM_write () und von EEPROM_print () an main zu übergeben. Jede Hilfe ist willkommen.

Was bekommt man eigentlich aus dem Eeprom-Druck?
Ich muss eine Zeichenfolge in das EEPROM schreiben und sie zurücklesen, um sie auf dem LCD zu drucken. Eigentlich muss ich eine kleine Datenbank im EEPROM verwalten.
Mikrocontroller sind für neue C-Programmierer sehr unversöhnlich. Ich schlage vor, dass Sie die AVR-Bibliotheken auf einem PC nachbauen und Ihren Code dort testen. Es kann auch nützlich sein, Ihr C aufzufrischen, c.learncodethehardway.org
Ich benutze AVRStudio5 für die AVR-Simulation. Und ja, wirklich! Ich sollte mein c auffrischen.
@Bishal Was genau gibt EEPROM_print() zurück, damit Sie es auf dem LCD anzeigen können? Nicht was soll es zurückgeben, sondern was gibt es zurück? Was ist daran "funktioniert nicht"? Ist es einfach leer? Ist es Kauderwelsch? Was?
@Majenko Es sollte Bytes zurückgeben, die aus dem EEPROM gelesen wurden.
@JobyTaffey Vielen Dank für den Link, den Sie zu einem anderen Thema bereitgestellt haben: mainframe.cx/~ckuethe/avr-c-tutorial/lesson11.c Ich habe viel Hilfe davon erhalten.
@bishal ja, ich weiß, was es zurückgeben soll . Aber was erlebst du, wenn es zurückkehrt?

Antworten (2)

Variablen, die im EEPROM von AVRs in C gespeichert sind, müssen in den .eepromAbschnitt gestellt werden.

(Von 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)

Um eine Variable im EEPROM zu speichern und darauf zuzugreifen, möchten Sie etwas wie:

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));
}

Hier ist eine Anleitung.

Vielen Dank an Sie alle für Ihre großartige Hilfe. Eigentlich habe ich meine Lösung von:
http://mainframe.cx/~ckuethe/avr-c-tutorial/lesson11.c Ich habe den Code wie folgt bearbeitet

 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;
 }
Sie haben immer noch einen Fehler, der zurückkommen und Sie in der Zukunft beißen wird, auch wenn es jetzt zu funktionieren scheint. In Ihrer EEPROM_print()-Routine müssen Sie den Sendezeiger auf die Adresse eines Puffers initialisieren, der so zugewiesen wurde, dass er den Abschluss der Funktion überlebt.
Stimmen Sie @ChrisStratton absolut zu, Sie müssen Speicherplatz zuweisen, char *sendder nicht lokal für die Methode ist. Lesen Sie die Frage und Antwort hier: stackoverflow.com/questions/6441218/…