Forum: Compiler & IDEs Kodierfehler, welche ich nicht gelöst bekommen habe


von Khan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

jetzt habe ich mir endlich Zeit reserviert und mein Kode mal 
überarbeitet...
Natürlich ist da auch etwas schief gegangen, welches ich nicht gelöst 
bekommen habe..


Nach dem ich die Ports einzeln definiert habe ist folgende Fehler 
aufgetreten:

Compiling: lcd_m50530.c
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields 
-fp
o lcd_m50530.o
lcd_m50530.c: In function 'LCD_execute':
lcd_m50530.c:90: error: lvalue required as left operand of assignment
lcd_m50530.c:102: error: lvalue required as left operand of assignment
lcd_m50530.c: In function 'LCD_waitReady':
lcd_m50530.c:128: error: lvalue required as left operand of assignment
lcd_m50530.c:129: error: lvalue required as left operand of assignment
lcd_m50530.c:130: error: lvalue required as left operand of assignment
lcd_m50530.c:131: error: lvalue required as left operand of assignment
lcd_m50530.c:132: error: lvalue required as left operand of assignment
lcd_m50530.c:133: error: lvalue required as left operand of assignment
lcd_m50530.c:134: error: lvalue required as left operand of assignment
lcd_m50530.c:135: error: lvalue required as left operand of assignment
lcd_m50530.c:148: error: lvalue required as left operand of assignment
lcd_m50530.c:164: error: lvalue required as left operand of assignment
lcd_m50530.c:181: error: lvalue required as left operand of assignment
lcd_m50530.c:207: error: lvalue required as left operand of assignment
lcd_m50530.c:208: error: lvalue required as left operand of assignment
lcd_m50530.c:209: error: lvalue required as left operand of assignment
lcd_m50530.c:210: error: lvalue required as left operand of assignment
lcd_m50530.c:211: error: lvalue required as left operand of assignment
lcd_m50530.c:212: error: lvalue required as left operand of assignment
lcd_m50530.c:213: error: lvalue required as left operand of assignment
lcd_m50530.c:214: error: lvalue required as left operand of assignment
lcd_m50530.c: In function 'LCD_sendByte':
lcd_m50530.c:226: error: lvalue required as left operand of assignment
lcd_m50530.c:227: error: lvalue required as left operand of assignment
lcd_m50530.c:228: error: lvalue required as left operand of assignment
lcd_m50530.c:229: error: lvalue required as left operand of assignment
lcd_m50530.c:230: error: lvalue required as left operand of assignment
lcd_m50530.c:231: error: lvalue required as left operand of assignment
lcd_m50530.c:232: error: lvalue required as left operand of assignment
lcd_m50530.c:233: error: lvalue required as left operand of assignment
lcd_m50530.c:238: error: lvalue required as left operand of assignment
lcd_m50530.c:239: error: lvalue required as left operand of assignment
lcd_m50530.c:240: error: lvalue required as left operand of assignment
lcd_m50530.c:241: error: lvalue required as left operand of assignment
lcd_m50530.c:242: error: called object '0' is not a function
lcd_m50530.c:243: error: called object '0' is not a function
lcd_m50530.c:244: error: called object '0' is not a function
lcd_m50530.c:245: error: called object '0' is not a function
lcd_m50530.c: In function 'LCD_readByte':
lcd_m50530.c:269: error: lvalue required as left operand of assignment
lcd_m50530.c:270: error: lvalue required as left operand of assignment
lcd_m50530.c:271: error: lvalue required as left operand of assignment
lcd_m50530.c:272: error: lvalue required as left operand of assignment
lcd_m50530.c:273: error: lvalue required as left operand of assignment
lcd_m50530.c:274: error: lvalue required as left operand of assignment
lcd_m50530.c:275: error: lvalue required as left operand of assignment
lcd_m50530.c:276: error: lvalue required as left operand of assignment
lcd_m50530.c:283: error: lvalue required as left operand of assignment
lcd_m50530.c:284: error: lvalue required as left operand of assignment
lcd_m50530.c:285: error: lvalue required as left operand of assignment
lcd_m50530.c:286: error: lvalue required as left operand of assignment



Könnt Ihr mir bei diesem Kodierproblem helfen...

Herzliche Grüße
Khan

von Gaast (Gast)


Lesenswert?

Das geht so nicht.

von Khan (Gast)


Lesenswert?

Wie meinst du dass?
Habe ich was Falsch gemacht mit dem Beitrag??

Sorry, habe nicht verstanden...

von Achim (Gast)


Lesenswert?

LCD_PORT4 = 1; wird durch den Präprozessor zu (PORTB & (1<<PB4)) = 1;
Damit es funktioniert müsste der resultierende Code aber irgendwie so 
aussehen: PORTB |= (1 << PB4);
Schau dir mal Bitmanipulation an, falls du noch mehr wissen willst.

von Georg W. (gewe)


Lesenswert?

Hallo Khan,

ich hab hier im Forum mal vor einiger Zeit folgendes ausgegraben:
1
struct port_typ {
2
  uint8_t b0:1;
3
  uint8_t b1:1;
4
  uint8_t b2:1;
5
  uint8_t b3:1;
6
  uint8_t b4:1;
7
  uint8_t b5:1;
8
  uint8_t b6:1;
9
  uint8_t b7:1;
10
};
11
12
#define IN(r,n)        (((volatile struct port_typ *)&r)->b##n)
13
#define IN_INV(r,n)  (!(((volatile struct port_typ *)&r)->b##n))
14
 
15
#define OUT(r,n)       (((volatile struct port_typ *)&r)->b##n)

Damit sollte dann auch
1
#define LCD_PORT4     OUT(PORTB,4) 
2
3
LCD_PORT4=1;

gehen.

Wenn ich mich recht erinnere kam das von Peter Dannegger.

von Peter D. (peda)


Lesenswert?

Khan schrieb:
> Nach dem ich die Ports einzeln definiert habe ist folgende Fehler
> aufgetreten:

Hast Du eben nicht.
Du hast was hingeschrieben, was keinen Sinn ergibt.
Und dann gibt es natürlich Fehler.

Warum hast Du Dich nicht an mein Beispiel aus dem anderen Thread 
gehalten?


Peter

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Georg Werner schrieb:
> Damit sollte dann auch
> #define LCD_PORT4     OUT(PORTB,4)
> LCD_PORT4=1;
> gehen.
Spiel doch mal selber ein wenig Präprozessor...

Du sagst ihm per #define: wenn du die Zeichenkette LCD_PORT4 findest, 
dann ersetze das mit der Zeichenkette OUT(PORTB,4)
Dann legt der los und findet hier was: LCD_PORT4=1;
Er macht also ganz stupide das daraus: OUT(PORTB,4)=1;

Und, macht sowas Sinn?

von Karl H. (kbuchegg)


Lesenswert?

Lothar Miller schrieb:
> Georg Werner schrieb:
>> Damit sollte dann auch
>> #define LCD_PORT4     OUT(PORTB,4)
>> LCD_PORT4=1;
>> gehen.
> Spiel doch mal selber ein wenig Präprozessor...
>
> Du sagst ihm per #define: wenn du die Zeichenkette LCD_PORT4 findest,
> dann ersetze das mit der Zeichenkette OUT(PORTB,4)
> Dann legt der los und findet hier was: LCD_PORT4=1;
> Er macht also ganz stupide das daraus: OUT(PORTB,4)=1;
>
> Und, macht sowas Sinn?

rhetorische Frage?

Mit
#define OUT(r,n)       (((volatile struct port_typ *)&r)->b##n)

geht die Ersetzung weiter:

  (((volatile struct port_typ *)&PORTB)->b4) = 1;

und mit der Strukturdefinition ergibt das absolut Sinn.

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.