www.mikrocontroller.net

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


Autor: Khan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Gaast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht so nicht.

Autor: Khan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie meinst du dass?
Habe ich was Falsch gemacht mit dem Beitrag??

Sorry, habe nicht verstanden...

Autor: Achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Georg W. (gewe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Khan,

ich hab hier im Forum mal vor einiger Zeit folgendes ausgegraben:

struct port_typ {
  uint8_t b0:1;
  uint8_t b1:1;
  uint8_t b2:1;
  uint8_t b3:1;
  uint8_t b4:1;
  uint8_t b5:1;
  uint8_t b6:1;
  uint8_t b7:1;
};

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


Damit sollte dann auch

#define LCD_PORT4     OUT(PORTB,4) 

LCD_PORT4=1;


gehen.

Wenn ich mich recht erinnere kam das von Peter Dannegger.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.