Embedded Systems und Firmware

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?

int flag = 0;
void timer_isr(void) { flag = 1; }
int main(void) {
    while (flag == 0) { }
    led_on();
}
  1. ADer Compiler liest flag nur einmal und nicht erneut in der Schleife. flag wird mit volatile versehen
  2. BBei einem Interrupt wird flag auf 0 zurückgesetzt. flag wird als long deklariert
  3. CEin leerer while-Rumpf hält die CPU an. In die Schleife wird eine Addition eingefügt
Antwort und Erläuterung anzeigen

Antwort: A. Der Compiler liest flag nur einmal und nicht erneut in der Schleife. flag wird mit volatile versehen

Der Compiler betrachtet nur main und schließt daraus, dass nichts in der Schleife flag ändert; er kann Code erzeugen, der flag nur einmal in ein Register liest und mit diesem Wert weiterläuft. Auch wenn der Interrupt-Handler flag im Speicher ändert, sieht die Schleife dies nicht. Mit volatile wird bei jedem Zugriff aus dem Speicher gelesen bzw. dorthin geschrieben. Bei Variablen aus mehreren Bytes ist zusätzlich dafür zu sorgen, dass Lesen und Schreiben nicht von einem Interrupt unterbrochen werden.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Embedded Systems und Firmware

  1. 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?
  2. Welche Aussage zur seriellen Kommunikation per UART ist korrekt?
  3. 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?
  4. 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?
  5. Welche Aussage zur SPI-Kommunikation ist korrekt?

Vergleiche zu diesem Thema