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
> 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.
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
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. |
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
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...
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.
> Anbei der Code: > > struct New_Own_Program_1 > { > > uint8_t time_1_min; ^^^^^^^ Der müsste schon hier anfangen zu meckern.
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.
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.
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.