Embedded Systems und Firmware

Was sollte in einem Interrupt-Handler am ehesten vermieden werden?

  1. AEine 1 in eine Flag-Variable schreiben, um das Hauptprogramm zu informieren
  2. BDas Bit löschen, das die Interrupt-Ursache anzeigt
  3. CZeitaufwendige Verarbeitung wie die Ausgabe langer Zeichenketten mit printf oder Schleifen, die warten, bis etwas eintritt
Antwort und Erläuterung anzeigen

Antwort: C. Zeitaufwendige Verarbeitung wie die Ausgabe langer Zeichenketten mit printf oder Schleifen, die warten, bis etwas eintritt

Läuft ein Interrupt-Handler lange, kann er währenddessen nicht auf andere Interrupts reagieren, und auch das Hauptprogramm steht still. printf braucht bis zum Ende der Ausgabe Zeit und verwendet intern teils Interrupts, ist also besonders gefährlich. Im Handler wird nur das Minimum erledigt, etwa Daten empfangen und in einen Puffer legen oder ein Flag setzen; aufwendige Verarbeitung überlässt man dem Hauptprogramm oder einem Task. Das Löschen des Ursachenbits darf nicht vergessen werden.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Embedded Systems und Firmware

  1. Beim Kompilieren des obigen Programms mit aktivierter Optimierung wird led_on() mitunter auch dann nicht aufgerufen, wenn ein Timer-Interrupt auftritt. Welche Kombination aus Ursache und Gegenmaßnahme ist korrekt?
  2. Bei einem 8-Bit-Mikrocontroller erhöht ein Timer-Interrupt die 32-Bit-Variable ticks um 1, und das Hauptprogramm liest ticks, um die verstrichene Zeit zu bestimmen. Was ist die richtige Ursache dafür, dass mitunter stark abweichende Werte gelesen werden?
  3. Welche Aussage zur seriellen Kommunikation per UART ist korrekt?
  4. Wie viele Bytes pro Sekunde lassen sich bei einem UART mit 115200 bps im Format 8 Datenbits, keine Parität, 1 Stoppbit (8N1) ungefähr senden?
  5. Weichen die Baudraten von Sender und Empfänger bei UART geringfügig ab, kann es zu verstümmelten Zeichen kommen. Warum ist die zulässige Abweichung auf etwa einige Prozent begrenzt?

Vergleiche zu diesem Thema