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
Wie meinst du dass? Habe ich was Falsch gemacht mit dem Beitrag?? Sorry, habe nicht verstanden...
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.
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.
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.