Forum: Mikrocontroller und Digitale Elektronik Lesen eines Blocks aus einem ATMeaga 32


von Martin B. (nutnic)


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

von g457 (Gast)


Lesenswert?

> Ich verwende beim schreiben den selben Befehl, da mekert er aber nicht.

Das glaube ich nicht, da ist nämlich eine überzählige Klammer drin.

von Martin B. (nutnic)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

Kompletten Code her.

von Baldrian (Gast)


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.

von Martin B. (nutnic)


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

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Martin B. schrieb:
> sprintf(text,"Name: %d "      ,eeprom_read_block   (   (void*)
> program_2.name_1
>                                 ,(const void*) 7
>                                 ,(size_t) 21) );

Klammer zu viel.
Wie bereits gesagt...

von MaWin (Gast)


Lesenswert?

MaWin schrieb:
> Klammer zu viel.
> Wie bereits gesagt...

Ne doch nicht. Der Code ist extrem schwer zu lesen. Vor allem, weil da 
die Hälfte auskommentiert und falsch eingerückt ist.

von g457 (Gast)


Lesenswert?

> Anbei der Code:
>
> struct New_Own_Program_1
> {
>
>  uint8_t time_1_min;
   ^^^^^^^

Der müsste schon hier anfangen zu meckern.

von MaWin (Gast)


Lesenswert?

Es gibt gar kein read_block, was nicht auskommentiert ist.
Du verschwendest unsere Zeit, wenn du uns nicht den Code gibst, der auch 
tatsächlich den Fehler wirft.

von MaWin (Gast)


Lesenswert?

g457 schrieb:
> Der müsste schon hier anfangen zu meckern.

Warum?

von Jim M. (turboj)


Lesenswert?

MaWin schrieb:
> g457 schrieb:
>> Der müsste schon hier anfangen zu meckern.
>
> Warum?

Weil  #include <stdint.h> fehlt?

Offenbar kennt g457 kein C99. ARV-GCC schon, mit o.g. Header.

von g457 (Gast)


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.

von Rainer B. (katastrophenheinz)


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.

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.