Bitmasken sind ziemlich einfach so lassen Sie uns durch diese erste laufen zu verstehen:
Lassen Sie sagen, Ihr 32-Bit-Register enthält einen Wert jetzt werde ich willkürlich 0xF48C6219 Pick
ich nehme an, Sie wissen, wie hex in das Binärformat zu konvertieren, wenn nicht ... sagen wir einfach, einen Rechner oder google verwenden (anstatt gehen in die nitty gritty, dass auch). So kann unser Hex-Wert binär dargestellt werden als:
+-- bit 31 +-- bit 0
| |
v v
1111 0100 1000 1100 0110 0010 0001 1001
^^
| |
+-+-- bits you want to set, 16-18
Boolesche Logik sagt uns, dass:
1) etwas ODER-Verknüpfung (|
) mit 1
gibt Ihnen einen Wert von 1
. Oder "setzt" das Bit.
2) alles AND'd (&
) mit 0
gibt Ihnen einen Wert von 0
. Oder "löscht" das Bit.
Wenn wir also Bits 16-18 möglich räumen wollten und mit einer Maske wie:
Basisnummer: 1111 0100 1000 1100 0110 0010 0001 1001 == 0xF48C6219
Maske Nummer: 1111 1111 1111 1000 1111 1111 1111 1111 == 0xFFF8FFF
1111 0100 1000 1100 0110 0010 0001 1001
& 1111 1111 1111 1000 1111 1111 1111 1111
------------------------------------------
1111 0100 1000 1000 0110 0010 0001 1001
Jetzt Sie oder ihn mit dem, was Sie dort setzen:
neuer Maske Nummer: 0000 0000 0011 0000 0000 0000 0000 0000 == 0x00030000
1111 0100 1000 1000 0110 0010 0001 1001
| 0000 0000 0000 0011 0000 0000 0000 0000
-----------------------------------------
1111 0100 1000 1011 0110 0010 0001 1001
So im Code:
#define CLEAR_MASK 0x70000 //70000 is shorter to write, so just do this and flip it
#define SET_3_MASK 0x30000
volatile uint32_t * const reg = (uint32_t *) 0x4A10005C;//set a pointer to the register
*reg &= ~CLEAR_MASK; //~ filps the bits
*reg |= SET_3_MASK;
Sie können Tricks mit Bits verschieben und so weiter, aber das ist die Grundlagen von Bitmasken und wie sie funktionieren. Ich hoffe es hilft.
ohne zu verstehen, wie Bit-Operationen funktionieren und so etwas wie Bit-Masken könnte es wirklich schwierig sein, Bits zu manipulieren ... – codewarrior
Was ist verwirrend über Bit-Masken für Sie? – Mike
Es gibt 2 Möglichkeiten, um auf Bit-Level-Informationen BITWISE-Operatoren und Bitwise-Struktur in c –