Max schrieb:
> Hallo,
>
> ich wollte für eine Drehrichtungsumpolung (L298) die zwei
> angeschlossenen Ausgänge in einem Makro umschalten (definiert, kein
> togglen). Die übliche Methode
>
>
1 | > #define RECHTS PORTD |= (1 << PIN0)
|
2 | > #define RECHTS_AUS PORTD &= ~((1 << PIN0))
|
3 | >
|
Ich nehme mal an die Hardware ist AVR.
1 | PORTD |= (1 << PIN1);
|
2 | PORTD &= ~(1 << PIN0);
|
hat den Vorteil, daß die Einzeloperationen atomar sind und der Code
etwas hürzer (PINx zu Compilezeit bekannt).
1 | PORTD = (PORTD | (1 << PIN1)) & ~(1 << PIN0);
|
Ist hingegen nicht atomar umsetzbar, kann dafür aber eine Race-Condition
verursachen wenn PORTD in einer ISR verändert wird. Dafür gint's
hier kein Glitch, d.h. die beiden BIts werden gleichzeitig gesetzt,
nicht nacheinander.