Oczywiście, sekwencja dwóch poniższych poleceń:
A |= 0x02;
A &= 0x02;
jest identyczna:
A = 0x02;
ile A
nie jest zmienny, ale rejestr sprzętu. W takim przypadku należy zapoznać się z instrukcją MCU/CPU (lub zmapowanym urządzeniem peryferyjnym), aby sprawdzić, dlaczego dokładnie ta sekwencja jest wymagana.
UPDATE
Zmienna vs rejestru Hardware
W komentarzach powyżej, OP zapytał jak odróżnić zmiennych i rejestruje.
To całkiem proste. Wszystko, co musisz zrobić, to spojrzeć na definicję. Podczas gdy typowe zmienna będzie definiowana jako coś takiego:
unsigned char A;
Hardware definicja rejestr będzie wyglądać podobnie do:
#define A (*(volatile uint16_t *)(0x1234))
Tutaj A
jest definiowana jako wartość rejestru sprzętowego, odwzorowane na adres w 0x1234
. Każdy mikrokontroler lub procesor ma swój własny, unikalny zestaw rejestrów sprzętowych i może różnić się nie tylko między różnymi rodzajami architektur i modeli, ale także między różnymi producentami. Jeśli kod źródłowy nie jest dobrze udokumentowany, jedynym sposobem na stwierdzenie, o jaki konkretny rejestr sprzętowy chodzi, jest przejrzenie arkusza danych sprzętowych. Ponadto niektóre zaawansowane architektury mogą rejestrować sprzęt z niektórych urządzeń peryferyjnych w przestrzeni adresowej procesora, dzięki czemu można uzyskać dostęp do rejestrów sprzętowych zewnętrznych komponentów w ten sam sposób.
Uwaga na słowo kluczowe volatile
.Z wiki:
Ten parametr zapobiega optymalizacji kompilatora z dala późniejsze odczytuje lub zapisuje, a więc nieprawidłowo ponowne wartość nieświeże lub pomijając zapisy. Wartości lotne powstają przede wszystkim w dostępie sprzętowym (we/wy odwzorowane w pamięci), gdzie odczytywanie lub zapisywanie w pamięci jest używane do komunikacji z urządzeniami peryferyjnymi oraz w wątkach, w których inny wątek mógł zmodyfikować wartość.
Wyświetlany kod i łącze do niego dotyczy systemu wbudowanego. Ustawianie i kasowanie bitów może spowodować różne rzeczy w sprzęcie. Możliwe, że jest podzielony w taki sposób, aby wywoływać różne zdarzenia sprzętowe. –
Również w C++ należy wziąć pod uwagę takie czynniki, jak przeciążanie operatorów. –
'IER' w twoim przykładzie to rejestr procesora, więc może być użyty w każdym cyklu. Może to jest powód. – SingerOfTheFall