Hallo,
entweder bin ich blind,oder der GCC übersetzt folgende Anweisung nicht
korrekt, bzw. nicht in das, was ich will:
event_memory ist _uint32_t. Aus folgendem Ausdruck:
1 | event_memory = event_memory & (~((1L<<1) || (1L<<2) || (1L<<4) || (1L<<3) || (1L<<5)||(1L<<25)));
|
macht der Compiler das hier:
1 | 00000865 LDS R24,0x011D Load direct from data space
|
2 | 00000867 LDS R25,0x011E Load direct from data space
|
3 | 00000869 LDS R26,0x011F Load direct from data space
|
4 | 0000086B LDS R27,0x0120 Load direct from data space
|
5 | 0000086D ANDI R24,0xFE Logical AND with immediate
|
6 | 0000086E STS 0x011D,R24 Store direct to data space
|
7 | 00000870 STS 0x011E,R25 Store direct to data space
|
8 | 00000872 STS 0x011F,R26 Store direct to data space
|
9 | 00000874 STS 0x0120,R27 Store direct to data space
|
Wenn ich mich nicht täusche, lädt er alle vier Byte, verundet aber nur
das unterste.
Kann man den Compiler irgendwei dazu bringen, das richtig zu machen?
Oder liegt das Problem wo ganz anders? (Den Ersten, der schreibt "Vor
dem Bildschirm" fress ich zum Mittagessen...)
Gruß,
Klaus-Bärbel