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);
  1. AAlleen bit 5 wordt op 1 gezet
  2. BHet veld van 3 bits, bit 4 tot 6, wordt op 0 gezet en daarna wordt er 5 (binair 101) in gezet
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Embedded systemen en firmware

  1. Terwijl het hoofdprogramma een registerbit bewerkt met "reg |= mask;" (lezen, wijzigen, schrijven), wijzigt een interrupthandler een ander bit van hetzelfde register. Welke combinatie van mogelijk probleem en tegenmaatregel is juist?
  2. Aan een ingangspin van een microcontroller is alleen een schakelaar aangesloten, zonder pull-up- of pull-downweerstand. Wat kan er gebeuren als de schakelaar open is?
  3. Wat moet als eerste worden ingesteld wanneer een GPIO-pin (general-purpose input/output) van een microcontroller wordt gebruikt?
  4. Hoe heet het verschijnsel dat bij het indrukken van een mechanische schakelaar de contacten licht stuiteren en in korte tijd meerdere keren aan en uit gaan?
  5. Welke methode is het meest geschikt om contactdender van een schakelaar met software te verwijderen?

Vergelijkingen bij dit onderwerp