Embedded Systems und Firmware

Der obige Code ändert ein Einstellungsfeld mit mehreren Bits des Registers reg. Was tut er?

reg = (reg & ~(0x7 << 4)) | (5 << 4);
  1. AEr setzt nur Bit 5 auf 1
  2. BEr löscht das 3-Bit-Feld der Bits 4 bis 6 auf 0 und schreibt dann 5 (binär 101) hinein
  3. CEr multipliziert den Wert von reg mit 5 und schiebt ihn um 4 Bit nach links
Antwort und Erläuterung anzeigen

Antwort: B. Er löscht das 3-Bit-Feld der Bits 4 bis 6 auf 0 und schreibt dann 5 (binär 101) hinein

0x7 ist binär 111, daher ist „0x7 << 4“ eine Maske, in der die Bits 4 bis 6 gleich 1 sind. UND mit ihrer Negation löscht das Feld auf 0, und ODER mit „5 << 4“ (101 in den Bits 4 bis 6) ändert nur das Feld auf 5, während die übrigen Bits unverändert bleiben. Das ist die Grundform zum Umschreiben von Registern, in denen mehrere Bits eine Einstellung bilden, etwa Betriebsmodus oder Teilerverhältnis.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Embedded Systems und Firmware

  1. Das Hauptprogramm manipuliert ein Registerbit mit „reg |= mask;“ (Lesen, Ändern, Schreiben), während ein Interrupt-Handler ein anderes Bit desselben Registers ändert. Welche Kombination aus möglichem Problem und Gegenmaßnahme ist korrekt?
  2. An einem Eingangspin eines Mikrocontrollers ist nur ein Schalter angeschlossen, ohne Pull-up- oder Pull-down-Widerstand. Was kann bei geöffnetem Schalter passieren?
  3. Was muss bei der Verwendung eines GPIO-Pins (Allzweck-Ein-/Ausgang) eines Mikrocontrollers zuerst eingestellt werden?
  4. Wie heißt das Phänomen, dass beim Betätigen eines mechanischen Schalters die Kontakte in kurzer Zeit mehrfach zwischen Ein und Aus springen?
  5. Welche Methode zum Entprellen von Schaltern per Software ist am besten geeignet?

Vergleiche zu diesem Thema