Kodierfehler, welche ich nicht gelöst bekommen habe

Gast #1587099
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
Angehängte Dateien:
#1588241
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.
#1588498
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
Moderator (Firma: Titel) Persönliche Seite #1590424
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?
#1590438
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.

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