Embedded Systems und Firmware

Welche C-Bedingung prüft, ob Bit 5 des Eingaberegisters in gleich 1 ist?

  1. Aif (in | (1 << 5))
  2. Bif (in == 5)
  3. Cif (in & (1 << 5))
Antwort und Erläuterung anzeigen

Antwort: C. if (in & (1 << 5))

„in & (1 << 5)“ ergibt einen Wert, in dem alle Bits außer Bit 5 gleich 0 sind; ist Bit 5 gleich 1, ist das Ergebnis 32 (ungleich 0, also wahr), sonst 0 (falsch). Da in C alles ungleich 0 wahr ist, lässt es sich direkt als Bedingung einer if-Anweisung verwenden. Soll das Ergebnis 1 oder 0 sein, schreibt man „(in >> 5) & 1“. Mit ODER ist das Ergebnis stets ungleich 0, und es wird nichts geprüft.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Embedded Systems und Firmware

  1. Der obige Code ändert ein Einstellungsfeld mit mehreren Bits des Registers reg. Was tut er?
  2. 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?
  3. An einem Eingangspin eines Mikrocontrollers ist nur ein Schalter angeschlossen, ohne Pull-up- oder Pull-down-Widerstand. Was kann bei geöffnetem Schalter passieren?
  4. Was muss bei der Verwendung eines GPIO-Pins (Allzweck-Ein-/Ausgang) eines Mikrocontrollers zuerst eingestellt werden?
  5. Wie heißt das Phänomen, dass beim Betätigen eines mechanischen Schalters die Kontakte in kurzer Zeit mehrfach zwischen Ein und Aus springen?

Vergleiche zu diesem Thema