Warum wird folgender Ausdruck NIE wahr??
1 | if ( ~PINC == 0xFF ) |
2 | {
|
3 | ...
|
Der Compiler (-Os) macht daraus folgenden Unsinn: WOzu muss das in 16bit gerechnet werden?? Da der hier das höherwertige Byte (wo auch immer er das hernimmt) mit Null initialisiert und auf 0xFF vergleicht, wirds nie wahr. ABER WARUM??
1 | IN R24,0x13 In from I/O location |
2 | CLR R25 Clear Register |
3 | SUBI R24,0x00 Subtract immediate |
4 | SBCI R25,0xFF Subtract immediate with carry |
5 | BRNE PC-0x3B edit: springe, wenn NICHT wahr |
Mache ich es allerdings so, dann geht es:
1 | variable = ~PINC; |
2 | if ( variable == 0xFF ) |
3 | {
|
4 | ...
|
Das erzeugt:
1 | LDS R24,0x0100 Load direct from data space |
2 | CPI R24,0xFF Compare with immediate |
3 | BRNE PC-0x3A edit: springe, wenn NICHT wahr |