Chodzi o to, że operacja |= generuje (najczęściej) sekwencję R-M-W (read - modify - write). Czyli rejestr konfiguracyjny jest odczytywany do rejestru ogólnego procesora, na tym rejestrze jest dokonywana operacja arytmetyczno/logiczna (OR) a na koniec wynik jest zapisywany nazad w rejestrze konfiguracyjnym.
Przykład:
Zaloguj się, aby zobaczyć kod
Operacja
PORTB |= 1<<PB1 | 1<<PB6; generuje trzy rozkazy procesora:
- odczyt zawartości rejestru PORTB (adres 0x18) do r24
- sumę bitową wartości r24 i stałej 0x42 (1<<PB1 | 1<<PB6)
- zapisanie wartości z r24 do rejestru PORTB (adres 0x18)
Wersja bez sumy bitowej:
Zaloguj się, aby zobaczyć kod
Do rejestrów konfiguracyjnych wykonuje się najczęściej jeden zapis - przy konfiguracji danego peryferiala. W związku z tym nie ma potrzeby wykonywania operacji sumy bitowej i można wykorzystać zwykłe przypisanie. Kod jest wtedy krótszy i szybszy (... i kolega
BlueDraco się nie czepia

). Suma bitowa pozwala zachować niezmienianą zawartość rejestru, ale jeśli konfigurujemy jakiś układ to najczęściej rejestr konfiguracyjny ma (przed konfiguracją) wartość 0 - stosowanie na nim sumy bitowej jest bez sensu. A nawet jeśli nie ma wartości zerowej, to zazwyczaj wiemy jaką wartość rejestr ma mieć po konfiguracji układu - czyli możemy wykorzystać zwykłe przypisanie zamiast sumy bitowej.