Forum: Mikrocontroller und Digitale Elektronik Bit invertieren klappt nicht


von student (Gast)


Lesenswert?

Hallo,

ich versuche mich gerade in AVR-GCC-Tutorial einzuarbeiten mit AVR 
studio. Es klapp soweit alles gut. Ausser mit folgenden Code Zeilen. Ich 
will eigentlich nur den Bit auf der Stelle K100 eines Bytes LSO_DATA zu 
invertiren.

>>#define LS0_DATA 0x00
>>#define K100 5
>>LS0_DATA ^= (1<<K100);

Wenn ich kompeliere dann bekomme ich staendig folgenden Fehler fuer die 
letzte Zeile.

>>value required as left operand of assignment

Weis jemand was ich falsch mache?

Gruss

von Simon B. (nomis)


Lesenswert?

student schrieb:
> ich versuche mich gerade in AVR-GCC-Tutorial einzuarbeiten mit AVR
> studio. Es klapp soweit alles gut. Ausser mit folgenden Code Zeilen. Ich
> will eigentlich nur den Bit auf der Stelle K100 eines Bytes LSO_DATA zu
> invertiren.
>
>>>#define LS0_DATA 0x00
>>>#define K100 5
>>>LS0_DATA ^= (1<<K100);
>
> Wenn ich kompeliere dann bekomme ich staendig folgenden Fehler fuer die
> letzte Zeile.
>
>>>value required as left operand of assignment
>
> Weis jemand was ich falsch mache?

Du mißverstehst #define. Das ist nur eine textuelle Ersetzung. Du hast 
programmiert:

0x00 ^= (1<<5);

Und das ist offensichtlich Blödsinn.

Viele Grüße,
        Simon

von Markus (Gast)


Lesenswert?

Zumal LSO_DATA auch keinen Speicher zugewiesen wurde, also ist der 
Ausdruck "LSA_DATA ^= (1<<K100)" irgendwie witzlos :D

LG

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

student schrieb:
> will eigentlich nur den Bit auf der Stelle K100 eines Bytes LSO_DATA zu
> invertiren.
> Datum: 17.08.2011 03:46
Das erklärt einiges...

Probiers mal so:
1
char LS0_DATA = 0x00;
2
#define K100 5
3
4
LS0_DATA ^= (1<<K100);
Und jetzt überleg mal, warum LSO_DATA bei mir ein gültiger lvalue ist 
und bei dir nicht...

von Thomas E. (thomase)


Lesenswert?

student schrieb:
> ich versuche mich gerade in AVR-GCC-Tutorial einzuarbeiten mit AVR
> studio. Es klapp soweit alles gut. Ausser mit folgenden Code Zeilen. Ich
> will eigentlich nur den Bit auf der Stelle K100 eines Bytes LSO_DATA zu
> invertiren.

Die folgenden Zeilen sind überhaupt kein Code.

student schrieb:
> Weis jemand was ich falsch mache?

Du kannst kein C.
Besorg' dir ein C-Buch und arbeite erstmal das durch.
Sonst wird das nie was.

mfg.

von Karl H. (kbuchegg)


Lesenswert?

Und ganz wichtig:
Vorne zu lesen anfangen. Nicht mitten drinn, bei einem Kapitel das dich 
interessiert. Dann kommt es auch nicht zu diesen Fehleinschätzungen, was 
#define eigentlich macht.

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.