Forum: Compiler & IDEs invalid lvalue


von Michael (Gast)


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 :)

von A.K. (Gast)


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;
   ...

von Michael (Gast)


Lesenswert?

super, danke, das bringt mich schonmal weiter.

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

von Olliver (Gast)


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 ;)

von Michael (Gast)


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 :(

von A.K. (Gast)


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.

von Michael (Gast)


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

??

von A.K. (Gast)


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.

von Michael (Gast)


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.

von Chris (Gast)


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 (\).

von lekro (Gast)


Lesenswert?


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.