Forum: Mikrocontroller und Digitale Elektronik EEPROM Block Access funktioniert nicht


von Stefan (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Problem mit dem Verständnis der Funktion 
"eeprom_read_block" und "eeprom_write_block". Ich muss eine Struktur ins 
EEPROM schreiben und rauslesen. Einzelne Bytes ins EEPROM schreiben hat 
bei mir funktioniert, aber ich glaube ich habe den Syntax noch nicht 
ganz verstanden um einen ganzen
Block (struct) zu schreiben:

So sieht mein Programm aus.
1
typedef struct {
2
  int8_t unused;
3
  int8_t csCalbOUT1;  
4
  int8_t csCalbOUT2;  
5
  int8_t csCalbOUT3;  
6
  int8_t csCalbOUT4;  
7
  int8_t csCalbOUT5;  
8
  int8_t csCalbOUT6;  
9
  int8_t csCalbOUT7;  
10
  int8_t csCalbOUT8;  
11
  int8_t csCalbOUT9;  
12
  int8_t csCalbOUT10;  
13
  int8_t csCalbOUT11;  
14
  int8_t csCalbOUT12;  
15
  int8_t csCalbOUT13;  
16
  int8_t csCalbOUT14;  
17
  int8_t csCalbOUT15;  
18
  int8_t csCalbOUT16;  
19
  int8_t TOffset;    
20
} eeprom_calbData;
21
22
eeprom_calbData EEMEM;
23
24
int8_t  CalbData[18];
25
26
int main(void)
27
{   
28
29
    eeprom_read_block(&CalbData, eeprom_calbData, sizeof(CalbData));
30
31
    while(1)
32
    {
33
34
         //Programm
35
    }
36
}

Ich bekomme folgende Fehler raus wenn ich kompiliere:
1. too few arguments to function 'eeprom_read_block'
2. expected expression before 'eeprom_calbData'

Ich habe schon unzählige Sachen ausprobiert aus dem GOOGLE leider ohne 
Erfolg.
Kann mir einer Helfen?

Grus Stefan

von Rainer U. (r-u)


Lesenswert?

Wo ist denn die Funktion eeprom_read_block, die Du benutzt, definiert? 
in einer Lib? Hast Du den Quelltext davon / wie viele Argumente will sie 
haben?

von Cyblord -. (cyblord)


Lesenswert?

Du definiertst die EEPROM Variable genau wie jede andere, nur mit EEMEM 
dahinter. Das tust du bisher nicht.

Was soll das:

>eeprom_calbData EEMEM;

für ein Konstrukt sein? calbData ist der Datentyp. Du hast keinen Namen 
für die Variable.
1
eeprom_calbData eepromVar EEMEM;

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:
> So sieht mein Programm aus.

Das Programm ist unvollständig. Keine Includes drin? Ohne klappts auf 
keinen Fall.

> [CODE]typedef struct {
> } eeprom_calbData;
>
> eeprom_calbData EEMEM;
>
> int8_t  CalbData[18];

Ungünstig, einmal eine Struct und andermal ein Array zu nehmen. Halte 
die Typen sowohl im RAM als auch im EEPROM gleich, sonst ist Ärger 
vordefiniert.

> Ich bekomme folgende Fehler raus wenn ich kompiliere:
> 1. too few arguments to function 'eeprom_read_block'

In Zeile 1 steht kein eeprom_read_block.

> 2. expected expression before 'eeprom_calbData'

In Zeile 2 steht kein eeprom_calbData.

> Kann mir einer Helfen?

Poste vollständigen_ Code und _vollständige Fehlermeldungen.

Mit Deinen Fitzeln kann man recht wenig anfangen - leider. Welcher µC, 
welcher Compiler?

von Cyblord -. (cyblord)


Lesenswert?

Das Problem ist denke ich nicht der unvollständige Code, sondern hier 
fehlt es an schlichten C Grundlagen.
Variabeln, Adressen und Datentypen werden wild gemischt oder 
gleichgesetzt. So wird das nichts.

> Ich habe schon unzählige Sachen ausprobiert aus dem GOOGLE leider ohne

Weniger ausprobieren und mehr nachdenken und verstehen wäre angesagt.
Eigentlich enthält jede relevante Zeile mindestens einen Fehler.

So würde ein korrektes Beispiel aussehen:
1
typedef struct {
2
  int8_t unused;
3
  int8_t csCalbOUT1;  
4
  int8_t csCalbOUT2;  
5
  int8_t csCalbOUT3;  
6
  int8_t csCalbOUT4;  
7
  int8_t csCalbOUT5;  
8
  int8_t csCalbOUT6;  
9
  int8_t csCalbOUT7;  
10
  int8_t csCalbOUT8;  
11
  int8_t csCalbOUT9;  
12
  int8_t csCalbOUT10;  
13
  int8_t csCalbOUT11;  
14
  int8_t csCalbOUT12;  
15
  int8_t csCalbOUT13;  
16
  int8_t csCalbOUT14;  
17
  int8_t csCalbOUT15;  
18
  int8_t csCalbOUT16;  
19
  int8_t TOffset;    
20
} eeprom_calbData;
21
22
eeprom_calbData CalbDataEEPROM EEMEM;
23
24
eeprom_calbData CalbData;
25
26
int main(void)
27
{   
28
29
    eeprom_read_block(&CalbData, &CalbDataEEPROM, sizeof(eeprom_calbData));
30
31
    while(1)
32
    {
33
34
         //Programm
35
    }
36
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.