Wieso geht das nicht, bzw. wieso kriege ich stets die Fehlermeldung "error: invalid lvalue in assignment"? void Test(void) { unsigned char MyReg[8]; int step_count = 4000; (int *) (MyReg+2) = step_count; // error: invalid lvalue in assignment (int *) &MyReg[2] = step_count; // error: invalid lvalue in assignment } Ich verwende AVRGCC 4.1.2
(MyReg+2) ist eine Adresse. (int *) (MyReg+2) ist immer noch eine Adresse. Da eine Adresse (stark vereinfacht) einer Konstanten entspricht, steht da so etwas ähnliches wie 1 = 2 Gemeint ist wohl *(int *)(MyReg+2) = ...
Oups... Danke! Du hast recht! Das Problem ist tatsächlich, dass ich den ersten Pointer * vergessen habe! Ich hasse Montag Morgen... ;o))
Du nimmst also an, dass das Array fortlaufend im Speicher definiert ist, oder ? Warum willst Du einen int-Wert in einem Char-Array speichern ? Das passt nicht so ganz zusammen. Die Definition von int ist von Plattform zu Plattform unterschiedlich definiert, d.h. Deine Lösung ergibt einen sehr schlecht portierbaren Code. Ok, ich nehme an, Du brauchst noch 8 Byte Speicher :-)
>Du nimmst also an, dass das Array fortlaufend im Speicher definiert ist, >oder ? -Ja- Ich könnte den MyReg-Block natürlich auch als Struct, statt als Array zusammen bauen, das wäre etwas sauberer. Aber auf den Registerblock wird eh Bytweise als I2C-Bus Registerblock von einem anderen Controller aus gelesen und geschrieben...
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.