Fehlermeldung: expression must be a modifiable lvalue

Gast #403411
Lesenswert?

Hallo Experten,

ich benutzen eine MSP430F2131 und möchte einen Register einen Wert zu
weisen, doch der Compiler gibt ein Error raus.

"Error[Pe137]: expression must be a modifiable lvalue"

Was mache ich Falsch ?
Als Anhang ist mein C code.

Danke im Vorraus

Patrick
Angehängte Dateien:
Gast #403412
Lesenswert?

Zum besseren Verständnis.

Ich hab oben meine Register definiert.
#define USICTL0 0x78

unten möchte ich den definierten Register einen Wert zuweisen z.B.
USICTL0=0xEE;
Doch da bleibt der Compiler hängen und gibt mir die Fehlermeldung raus
die als Anhang dabei ist.

Danke im Vorraus

Patrick
Angehängte Dateien:
Gast #403413
Lesenswert?

Das was du geschrieben hast:
#define USICTL0 0x78
USICTL0=0xEE;

Führt dazu:

0x78 = 0xEE;

USICTL0 soll wohl ein Register sein?
Da wirst du dir entweder eine fertige Inklude-Datei suchen müssen, die
dieses Register unterstützt, oder die Registerprogrammierung von Hand
realisieren (hab keine Ahnung vom MSP...).
Gast #403414
Lesenswert?

Wie Rahul schon erwähnt hat...

>> #define USICTL0 0x78

Damit definierst du eine Konstante namens "USICTL0" und belegst sie
mit dem Wert 0x78.

>> USICTL0=0xEE;

Mit dieser Zeile würdest du der Konstanten "USICTL0" (welche ja
schon definiert wurde) den Wert 0xEE zuweisen. Dies geht natürlich
nicht (eine Konstante wird ja nicht umsonst als solche bezeichnet).

Gruß,
Magnetus
Gast #403416
Lesenswert?

@Magnetus:
Stimmt so nicht ganz (zumindest begrifflich), es ist keine Konstante
sondern ein Makro, dessen Name an jeder Stelle, an der er im Quelltext
auftaucht, mit dem zugewiesenen Text ersetzt wird. Es ist eine reine
Textersetzung, die zur Compiler-Laufzeit durchgeführt wird.

Konstanten werden in C mit

const TYP name = WERT;

definiert. Im Unterschied zu Makros belegen sie Speicherplatz im
Zielsystem!
Gast #674049
Lesenswert?

Hallo Leute,

ich bin nun auch auf das Problem gestoßen, das in diesem Beitrag 
diskutiert wird. Ich programmiere den NEC V850E/Dx3, compilieren, linken 
und programmieren funktioniert mit der Software FPL von NEC ganz gut, 
nun wollte ich mit der IAR workbench software v3.40A eine Software 
benutzen, mit der nebenbei auch debuggt werden kann.
Ich ordne nur nicht einem Wert einen anderen Wert zu wie oben der Fehler 
war, sondern in meiner Haederdatei df3423 wird z.B. der Registername PM9 
folgendermaßen einem bestimmten Speicherplatz zugewiesen:

Auszug aus Headerdatei df3423,h:

#define  PM9              CAST_UC(0xfffff432)



Ich möchte z.B. dieses Register mit einem Wert beschreiben. Beim FPL hat 
dies so noch funktioniert. Was CAST_UC zu bedeuten hat weiß ich leider 
nicht, ich habe die Headerdatei nicht selbst geschrieben.

Vielen Dank für eure Hilfe, macht weiter so!
Daniel
Angehängte Dateien:
Gast #678133
Lesenswert?

Hallo,

ich habe den Fehler gefunden, statt den angegeben Headerdateien 
df3423exti0.h und df3423.h muss die Headerdatei io70f3423.h eingefügt 
werden, die sich im IAR-Ordner befindet. Dann funktioniert es auch.

MfG

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