Subject: Klausur Juli 2009
Es geht um die Ankreuzaufgabe:
b) Ein Hauptprogramm und eine Interruptbehandlung greifen nebenläufig
auf die Variable uint16_t foo zu. Das Hauptprogramm verwendet foo
in der Anweisung uint16_t bar = foo; der Interrupthandler verwendet
foo im Vergleich if(foo == 5). Welches Nebenläufigkeitsproblem kann
auftreten?
❏ Lost-Update
❏ Lost-Wakeup
❏ keines
❏ Das Hauptprogramm könnte einen inkonsistenten Wert lesen, da foo aus 2 Bytes
besteht und nicht mit einer Instruktion geladen werden kann.
Ich denke ja, dass die ersten beiden Antworten hier nicht möglich sind.
Eigentlich wird doch die Variable foo im Interrupthandler gar nicht verändert.
Deswegen sollte doch dann auch kein Problem auftreten?
Weiterin wollte ich fragen, ob eine derartige globale Variable, wie foo, volatile gesetzt werden muss.
Im Prinzip verändert der Handler ja nichts an der Variablen.
Danke für eine Antwort
b) Ein Hauptprogramm und eine Interruptbehandlung greifen nebenläufig
auf die Variable uint16_t foo zu. Das Hauptprogramm verwendet foo
in der Anweisung uint16_t bar = foo; der Interrupthandler verwendet
foo im Vergleich if(foo == 5). Welches Nebenläufigkeitsproblem kann
auftreten?
❏ Lost-Update
❏ Lost-Wakeup
❏ keines
❏ Das Hauptprogramm könnte einen inkonsistenten Wert lesen, da foo aus 2 Bytes
besteht und nicht mit einer Instruktion geladen werden kann.
Ich denke ja, dass die ersten beiden Antworten hier nicht möglich sind.
Eigentlich wird doch die Variable foo im Interrupthandler gar nicht verändert.
Deswegen sollte doch dann auch kein Problem auftreten?
Weiterin wollte ich fragen, ob eine derartige globale Variable, wie foo, volatile gesetzt werden muss.
Im Prinzip verändert der Handler ja nichts an der Variablen.
Danke für eine Antwort
Show profile
Link to this post