www.mikrocontroller.net

Forum: Compiler & IDEs invalid lvalue


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
immer wenn ich folgenden code compilieren will:



#include <io.h>
#include "..\lib\mydefs.h"
#include "..\lib\lcd.h"
#include "..\lib\stepper.h"
#include "..\lib\rc5.h"
#include "..\lib\uart.h"
#include "..\lib\sensor.h"

int main(void)
{

// ports auf empfang setzen

PB0 = 0x1F;
PB1 = 0x1F;
PB2 = 0x1F;
PB3 = 0x1F;
PB4 = 0x1F;


  return 0;
}

komm die fehlermeldung:

"invalid lvalue in assignment" bei jeder port-zeile. wo liegt der
fehler ?

vielen dank für eure hilfe :)

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PB0 = Bit 0 von Port B.

Im Include-File steht
   #define PB0 0
bei dir also effektiv
   0 = 0x1F;

Was Du meinst:
   PORTA = 0x1F;
   PORTB = 0x1F;
   ...

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super, danke, das bringt mich schonmal weiter.

wenn ich nun aber schreibe PORTB = 0x1F kommt das gleiche wieder :(

Autor: Olliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dir ist schon bewusst, dass wenn du PORTB schreibst auf den ganzen Port
(8Bit) zugreifst. Deine zuweisung sah zuvor eher nach bitzuweisungen
aus (PB0, PB1.... auch wenn das 0x1F dann sinnlos wäre).

PORTB = 0x1F;
müsste eigentlich funktionieren, wenn du im makefile dar richtige
device angegeben hast.
zuvor solltest du allerdings das DDR für den entsprechenden Port
setzten. wie du mit dem kommentar angedeutet hast.
wie das geht kannst du millionenfach im internet lesen.
Viel Glück.

PS: ganz schön viele includes dafür, dass du netmal sowas ohne hilfe
hinbekommst ;)

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meine ganze intention von anfang an war es die datenrichtung auf empfang
zu setzen. hab da was ordentlich missverstanden, deswegen steht da oben
der bockmist.

schreibe ich jetzt aber vermeintlich korrekt:

DDRB = 0x1F;

kommt wieder der lvalue fehler :(

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann verrate uns mal, was der Präprozessor von DDRB übrig lässt.
Entweder Du überredest den Compiler den entsprechenden Zwischentext
auszuspucken, oder Du suchst in den Include-Files danach.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du meinst das:

/* Data Register, Port B */
#define    PB7      7
#define    PB6      6
#define    PB5      5
#define    PB4      4
#define    PB3      3
#define    PB2      2
#define    PB1      1
#define    PB0      0

??

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herrje, hatte ich PB0 geschrieben, oder vielleicht doch DDRB? Versuch
nicht drüber nachzudenken was ich vielleicht gemeint haben könnte aber
nicht zu fragen wagte, sondern schau einfach nach was ich koknret
gefragt habe. Also als was DDRB definiert ist.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du mir sagst wo ich das sehe ? :(

sry, aber ich betrete hier gerade absolutes neuland. tut mir leid wenn
ich euch mit meiner dummheit überschütte aber ich bin auf euch
angewiesen. danke.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches C-Buch hast du? Da sollte an und für sich drinstehen, wie der
Präprozessor arbeitet und wie solche Fehlermeldungen zu verstehen sind.
Wie A.K. gesagt hat, sag entweder dem Compiler, den Zwischentext
auszuspucken oder such in den .h-Dateien nach DDRB.

bzw, um wenigstens etwas Portabilität zu bewahren, benutz in den
Pfadangaben der #includes bitte normale Schrägstriche (/), keine
Backslashs (\).

Autor: lekro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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.