>main.c:12: warning: suggest parentheses around comparison in operand of |
Klammern sind in C nie zuviel, immer nur zuwenig.
== hat eine höhere Precedence als | , und damit macht die Zeile
1 | if (ADMUX== (uint8_t) (1<<REFS1) | (0<<REFS0)|THR_INPUT_PIN))
|
etwas ganz anderes, als du eigentlich beabsichtigst. Der Klammerausdruck
ist immer wahr (warum das so ist, kannst du ja selber mal rausknobeln),
und dann schlägt der Optimierer zu, und optimiert den Vergleich weg.
ADMUX wird aber trotzdem gelesen, da volatile.
Mit
1 | #define ADMUX_THR ((uint8_t) ((1<<REFS1) | (0<<REFS0)|THR_INPUT_PIN))
|
funktioniert dein Programm so, wie du erwartest.
Oliver