Lesen eines Blocks aus einem ATMeaga 32

OP #4872906
Lesenswert?
• ▲
▼
Guten Tag,

ich habe ein Problem mit einem ATMega32.
ICh will eine Block lesen. Das Beschreiben klappt. Aber das lesen 
quittiert er mit dieser Fehler Meldung.

invalid use of void expression.

eeprom_read_block ( (void*) program_2.name_1,(const void*) 7,(size_t) 
21) );

Program_2.name_1 ist ein Feld in einer Struktur.

Ich konnte den Fehler auf size_t eingrenzen.
Ich verwende beim schreiben den selben Befehl, da mekert er aber nicht.

Weiss jemmand Rat ?

Gruß Nutnic
Gast #4873007
Lesenswert?
• ▲
▼
Martin B. schrieb:
> Hallo g457,
>
> das ist nur ein Code schnipse. Ich habe noch mehr geschreiben.
> Ich wollte euch nur nicht zu Müllen mit meinem Programm.
>
> An der Klammrer liegt es nicht. :-)
>
> Gruß Nutnic
1
Deine Rechtschreibung wird nur noch von deiner Programmierkunst übertroffen.
OP #4873017
Lesenswert?
• ▲
▼
Anbei der Code:
1
struct New_Own_Program_1
2
{
3
  
4
  uint8_t time_1_min;
5
  uint8_t time_1_h;
6
  double temperature_1;
7
  uint8_t name_1 [21];
8
  
9
};
10
struct New_Own_Program_1 program_2 = {60,24,35,0};
11
  
12
int Wirte_In_EEPROM_1()
13
{
14
  eeprom_update_byte( ( uint8_t * ) 1, program_2.time_1_min );
15
  eeprom_update_byte( ( uint8_t * ) 2, program_2.time_1_h );
16
//  eeprom_update_float( ( float * ) 3, (float) program_2.temperature_1 );
17

18
  eeprom_update_block( (const void *) program_2.name_1, (void *) 7, (size_t) 21 );
19

20
  
21
  Wirte_of_Display_From_EEPROM();
22
  
23
  return 0;
24
}
25

26
int Wirte_of_Display_From_EEPROM()
27
{  
28
  /*
29
//  DOGM204_Clear_Display();
30
    
31
  DOGM204_Set_Cursor(1, 1);
32
  sprintf(text,"Aus EEPROM") ;
33
  DOGM204_Write_Text(text, true);
34
  
35
  DOGM204_Set_Cursor(2, 1);
36
  sprintf(text,"h: min: t: %d %d"  ,eeprom_read_byte ((uint8_t *) 1 )
37
                    ,eeprom_read_byte ((uint8_t *) 2 )
38
                    );//,eeprom_read_float((const float *) 3)  );
39
  DOGM204_Write_Text(text, true);
40
  
41
  DOGM204_Set_Cursor(3, 1);
42
  sprintf(text,"Name: %d "      ,eeprom_read_block   (   (void*) program_2.name_1
43
                                ,(const void*) 7
44
                                ,(size_t) 21) );
45
  DOGM204_Write_Text(text, true);
46
*/  
47
  return 0 ;
48
}

--

Das Forum bietet die [ c ] [ /c ]-Tags, um Quelltext lesbarer zu machen.

Nun, hier hilfts dann auch nicht.
-rufus
Gast #4873444
Lesenswert?
• ▲
▼
> Weil  #include <stdint.h> fehlt?

Jepp.

> Offenbar kennt g457 kein C99.

Doch. Augenscheinlich besser als Du.

> ARV-GCC schon, mit o.g. Header.

Jepp. Beim TO fehlt der. Oder eine der Alternativen. Also müsste der 
Compiler meckern. Wenn er das nicht tut unterschlägt der TO entweder 
Quellcode oder Fehlermeldungen. Beides ist nicht vorteilhaft.
#4873485
Lesenswert?
• ▲
▼
Martin B. schrieb:
> ICh will eine Block lesen. Das Beschreiben klappt. Aber das lesen
> quittiert er mit dieser Fehler Meldung.
>
> invalid use of void expression.

Ist doch klar, dass dein auskommentierter Kram nicht funktioniert:
So ist eeprom_read_block deklariert
1
void eeprom_read_block(
2
  void * __dst,
3
  const void * __src,
4
  size_t __n);
Und so verwendest du das:
1
sprintf(text,"Name: %d " ,
2
               eeprom_read_block( (void*)program_2.name_1,
3
                                  (const void*) 7,
4
                                  (size_t) 21
5
                                 )
6
        );
Die Fehlermeldung "invalid use of void expression" sagt doch schon 
alles: In der Argumentliste von sprintf darf kein void-Ausdruck 
auftauchen. Also Funktionsaufruf von eeprom_read_block vor sprintf und 
dann program_2.name_1 als Argument für sprintf übergeben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren