Embedded systemen en firmware
De bovenstaande code herschrijft een instelveld van meerdere bits in register reg. Wat gebeurt er?
reg = (reg & ~(0x7 << 4)) | (5 << 4);
- AAlleen bit 5 wordt op 1 gezet
- BHet veld van 3 bits, bit 4 tot 6, wordt op 0 gezet en daarna wordt er 5 (binair 101) in gezet
- CDe waarde van reg wordt met 5 vermenigvuldigd en 4 bits naar links geschoven
Antwoord en toelichting tonen
Antwoord: B. Het veld van 3 bits, bit 4 tot 6, wordt op 0 gezet en daarna wordt er 5 (binair 101) in gezet
0x7 is binair 111, dus "0x7 << 4" is een masker waarin bit 4 tot 6 gelijk zijn aan 1. Door de negatie hiervan met AND toe te passen, wordt het veld op 0 gezet, en door daarna "5 << 4" (101 op bit 4 tot 6) met OR toe te voegen, verandert alleen het veld in 5 en blijven de overige bits ongewijzigd. Dit is de basisvorm voor het herschrijven van registers waarin meerdere bits één instelling vormen, zoals werkmodus of deelverhouding.