Embedded Systems und Firmware

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?

  1. ADie Änderung durch den Interrupt geht durch das Zurückschreiben des Hauptprogramms verloren. Interrupts während der Operation sperren oder Register nur zum Setzen bzw. Löschen einzelner Bits verwenden
  2. BDas Register wird zerstört und ist nicht mehr nutzbar. Der Mikrocontroller wird ausgetauscht
  3. CEs passiert nichts. Eine Gegenmaßnahme ist nicht nötig
Antwort und Erläuterung anzeigen

Antwort: A. Die Änderung durch den Interrupt geht durch das Zurückschreiben des Hauptprogramms verloren. Interrupts während der Operation sperren oder Register nur zum Setzen bzw. Löschen einzelner Bits verwenden

„reg |= mask“ besteht aus drei Operationen: das Register lesen, ODER bilden und zurückschreiben. Tritt direkt nach dem Lesen ein Interrupt auf und ändert der Handler ein anderes Bit, schreibt das Hauptprogramm auf Basis des vor dem Interrupt gelesenen alten Werts zurück, und die Änderung des Handlers geht verloren. Wenn Interrupts nur während der Operation gesperrt werden oder Set- bzw. Clear-Register verwendet werden, bei denen nur die mit 1 beschriebenen Bits geändert werden, genügt ein einziger Schreibzugriff, und das Problem tritt nicht auf.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Embedded Systems und Firmware

  1. An einem Eingangspin eines Mikrocontrollers ist nur ein Schalter angeschlossen, ohne Pull-up- oder Pull-down-Widerstand. Was kann bei geöffnetem Schalter passieren?
  2. Was muss bei der Verwendung eines GPIO-Pins (Allzweck-Ein-/Ausgang) eines Mikrocontrollers zuerst eingestellt werden?
  3. Wie heißt das Phänomen, dass beim Betätigen eines mechanischen Schalters die Kontakte in kurzer Zeit mehrfach zwischen Ein und Aus springen?
  4. Welche Methode zum Entprellen von Schaltern per Software ist am besten geeignet?
  5. Ein 16-MHz-Takt wird per Prescaler durch 16 geteilt, ein Timer zählt damit, und alle 1000 Zählschritte wird ein Interrupt ausgelöst. Wie groß ist das Interrupt-Intervall?

Vergleiche zu diesem Thema